Pre*_*tor 7 .net vb.net string
我有一个长字符串,使用以下模式分为许多较小的字符串:
Public Class Test
Public Prefix_1 as String = "1 to 100 bytes"
Public Prefix_2 as String = "101 to 200 bytes"
Public Prefix_3 as String = "201 to 300 bytes"
Public Prefix_4 as String = "301 to 400 bytes"
'and so on
End Class
Run Code Online (Sandbox Code Playgroud)
这Test class已被编译为类库项目(即.dll文件)并保存到C:\ Test.dll
请注意,我不知道Prefix_dll文件中存在多少字符串.
我的问题是:如何检索以启动所有字符串Prefix_通过反射并连接它上升-LY(即Prefix_1&Prefix_2 ...)成一个字符串?
更新赏金:
赏金仅适用于VB.NET解决方案中的答案
这应该让你开始.对不起,它是C#,但我不记得lambda语法.
Type type = Assembly.LoadFrom (@"c:\test.dll").GetType ("Test");
object instance = type.GetConstructor (Type.EmptyTypes).Invoke (null);
var fields = type.GetFields ().Where (f => f.Name.StartsWith ("Prefix_")).OrderBy(f => f.Name);
string x = fields.Aggregate (new StringBuilder (), (sb, f) => sb.Append((string)f.GetValue (instance)), sb => sb.ToString ());
Run Code Online (Sandbox Code Playgroud)
VB.NET
Dim type As Type = Assembly.LoadFrom("c:\test.dll").GetType("Test")
Dim instance As Object = Type.GetConstructor(Type.EmptyTypes).Invoke(Nothing)
Dim fields = _
type.GetFields() _
.Where(Function(f) f.Name.StartsWith("Prefix_")) _
.OrderBy(Function(f) f.Name)
Dim bigString As String = _
fields.Aggregate(New StringBuilder(), _
Function(sb, f) sb.Append(DirectCast(f.GetValue(instance), String)), _
Function(sb) sb.ToString())
Run Code Online (Sandbox Code Playgroud)
您有公共字段,因此,从Type代表类的对象中获取FieldInfo对象并排除名称不以Prefix_
一旦有了这些,您就可以使用GetValue该FieldInfo对象(您的 class 实例Test)作为参数来调用对象来获取字段的值。
如果您需要以任何方式对结果进行排序,那么我建议使用 LINQ 语句
抱歉,我不懂VB,否则我会给你写一些代码。
更新:一些 C# 代码
Test myTestInstance = ... // Do stuff to the the instance of your class
Type myType = typeof(Test); // Or call GetType() on an instance
FieldInfo[] myFields = myType.GetFields();
var myPrefixedFields = myFields
.Where(fi => fi.Name.StartsWith("Prefix_"))
.OrderBy(fi => fi.Name);
string result = string.Empty;
foreach(FieldInfo fi in myPrefixedFields)
{
// You may prefer to use a string builder.
result += fi.GetValue(myTestInstance);
}
Run Code Online (Sandbox Code Playgroud)
应该就是这样。
| 归档时间: |
|
| 查看次数: |
598 次 |
| 最近记录: |