Обертка вокруг GNU ld, которая не поддерживает скрипты компоновщика
. Некоторые .so-файлы на самом деле являются GNU ld ссылками-компоновщиками , например. Файл libtbb.so является текстовым файлом ASCII с этим содержимым:
INPUT (libtbb.so.2)
Некоторые более сложные сборки могут не поддерживать это. Например, если вы включаете -v в параметры компилятора, вы можете видеть, что mainwin gcc wrapper mwdip отбрасывает файлы команд сценария компоновщика в подробном списке результатов библиотек для ссылки. Простая работа вместо файла командной строки ввода сценария компоновщика вместо копии (или символической ссылки), например
cp libtbb.so.2 libtbb.so
Или вы можете заменить аргумент -l полным путем .so, например вместо -ltbb
сделать /home/foo/tbb-4.3/linux/lib/intel64/gcc4.4/libtbb.so.2
Вы можете просто создать новый тип
''' <completionlist cref="Test"/>
Class Test
Private Key As String
Public Shared ReadOnly Contact As Test = New Test("Personal Contanct")
Public Shared ReadOnly PersonalInfo As Test = New Test("Personal Info")
Private Sub New(key as String)
Me.Key = key
End Sub
Public Overrides Function ToString() As String
Return Me.Key
End Function
End Class
, и, когда вы его используете, он выглядит как выглядит как [en]:
Sub Main
DoSomething(Test.Contact)
DoSomething(Test.PersonalInfo)
End Sub
Sub DoSomething(test As Test)
Console.WriteLine(test.ToString())
End Sub
output:
Персональная персональная информация
blockquote>
Как насчет использования меток. Что-то вроде:
Public Enum MyEnum
<StringValue("Personal Contact")>Contact
<StringValue("My PersonalInfo")>PersonalInfo
End Enum
Вам нужно написать атрибут StringValue как:
Public Class StringValueAttribute
Inherits Attribute
Public Property Value As String
Public Sub New(ByVal val As String)
Value = val
End Sub
End Class
Чтобы получить его:
Public Function GetEnumByStringValueAttribute(value As String, enumType As Type) As Object
For Each val As [Enum] In [Enum].GetValues(enumType)
Dim fi As FieldInfo = enumType.GetField(val.ToString())
Dim attributes As StringValueAttribute() = DirectCast(fi.GetCustomAttributes(GetType(StringValueAttribute), False), StringValueAttribute())
Dim attr As StringValueAttribute = attributes(0)
If attr.Value = value Then
Return val
End If
Next
Throw New ArgumentException("The value '" & value & "' is not supported.")
End Function
Public Function GetEnumByStringValueAttribute(Of YourEnumType)(value As String) As YourEnumType
Return CType(GetEnumByStringValueAttribute(value, GetType(YourEnumType)), YourEnumType)
End Function
И затем вызов для получения Enum (с использованием строкового атрибута):
Dim mEnum as MyEnum = GetEnumByStringValueAttribute(Of MyEnum)("Personal Contact")
Чтобы получить значение «Атрибут» (удаленное управление «Nothing» для ясности):
Public Function GetEnumValue(Of YourEnumType)(p As YourEnumType) As String
Return DirectCast(Attribute.GetCustomAttribute(ForValue(p), GetType(StringValueAttribute)), StringValueAttribute).Value
End Function
Private Function ForValue(Of YourEnumType)(p As YourEnumType) As MemberInfo
Return GetType(YourEnumType).GetField([Enum].GetName(GetType(YourEnumType), p))
End Function
И вызов для получения строкового атрибута (с использованием Enum):
Dim strValue as String = GetEnumValue(Of MyEnum)(MyEnum.Contact)
Как я могу получить это значение с помощью ENUM? или любой другой способ сделать это.
blockquote>Существует три общих способа сопоставления значений перечисления для строк:
- Используйте
Dictionary(Of YourEnumType, String)
- Украсить значения перечисления атрибутами (например,
DescriptionAttribute
) и получить их с отражением- Использовать оператор
Switch
. Первый из этих вариантов, вероятно, на мой взгляд.
Я знаю, что это старый пост, я нашел хорошее решение, которое стоит использовать:
''' <summary>
''' Gives acces to strings paths that are used often in the application
''' </summary>
Public NotInheritable Class Link
Public Const lrAutoSpeed As String = "scVirtualMaster<.lrAutoSpeed>"
Public Const eSimpleStatus As String = "scMachineControl<.eSimpleStatus>"
Public Const xLivebitHMI As String = "scMachineControl<.xLivebitHMI>"
Public Const xChangeCycleActive As String = "scMachineControl<.xChangeCycleActive>"
End Class
Использование:
'Can be anywhere in you applicaiton:
Link.xChangeCycleActive
Это предотвращает нежелательное дополнительное кодирование, это легко для поддержки, и я думаю, что это минимизирует дополнительные накладные расходы процессора.
Также визуальная студия отображает строковые атрибуты сразу после того, как вы наберете «Ссылка», как если бы она была обычной Enum
Для нецелых значений вместо Structure
(или Class
) можно использовать Const
:
Structure Test
Const PersonalInfo = "Personal Info"
Const Contanct = "Personal Contanct"
End Structure
или в Module
для прямого доступа без Test.
part:
Module Test
Public Const PersonalInfo = "Personal Info"
Public Const Contanct = "Personal Contanct"
End Module
В некоторых случаях имя переменной может использоваться как значение:
Enum Test
Personal_Info
Personal_Contanct
End Enum
Dim PersonalInfo As String = Test.Personal_Info.ToString.Replace("_"c, " "c)
' or in Visual Studio 2015 and newer:
Dim Contanct As String = NameOf(Test.Personal_Contanct).Replace("_"c, " "c)
Если все, что вы хотите сделать, это отобразить перечисления в списке или комбо, вы можете использовать тегировку, например
Private Enum MyEnum
Select_an_option___
__ACCOUNTS__
Invoices0
Review_Invoice
__MEETINGS__
Scheduled_Meetings0
Open_Meeting
Cancelled_Meetings0
Current_Meetings0
End Enum
Затем потяните MyEnum
в строку и используйте Replace
( или Regex
), чтобы заменить теги: «___» на «...», «__» с «**», «_» на «» и удалить конечные числа. Затем переупакуйте его в массив и выгрузите в выпадающий список, который будет выглядеть так:
Select an option...
**ACCOUNTS**
Invoices
Review Invoice
**MEETINGS**
Scheduled Meetings
Open Meeting
Cancelled Meetings
Current Meetings
(Вы можете использовать номера, чтобы, скажем, отключить текстовое поле для ввода номера счета или комнаты для переговоров В этом примере Review Invoice
и Open Meeting
могут ожидать дополнительный вход, поэтому для этих вариантов может быть включено текстовое поле.)
При анализе выбранного комбинированного элемента перечисление будет работать как ожидалось но вам действительно нужно добавить одну строку кода - замену текста - чтобы получить комбо, чтобы выглядеть так, как вы пожелаете.
(Объяснение примерно в 10 раз связано с фактическим решением!)