C# 在 .dll 中查找 类 的属性
C# Find Properties of Classes in a .dll
我正在尝试创建一种计算给定 class 属性的方法。
我可能想将 class 名称作为字符串传递,然后可以将该字符串转换为给定 class 的引用。我有 成百上千 的 class es(由 Thrift 生成)可以传入,所以给每个 class 自己的是不切实际的属性 计数器。
我的目的是为 class 提供参数,后者根据用户为每个特定方法需要输入的内容和返回的内容动态创建 UI。为了让自己不必为每个方法手动编写 UI。
有什么好的方法吗?
这是我目前的情况。
class PropertyCounter
{
public int PropertyCounter(string nameOfClass)
{
int count = typeof(nameOfClass).GetProperties().Count();
return count
}
}
您可以将 Activator.CreateInstance
与接受两个字符串的重载一起使用:一个用于类型所在的程序集,另一个用于指定类型(在您的例子中,class) .
https://msdn.microsoft.com/en-us/library/d133hta4(v=vs.110).aspx
public int PropertyCounter(string nameOfClass) {
return Activator.CreateInstance(nameOfAssembly,
nameOfClass).GetType().GetProperties().Count();
}
你应该检查失败
我使用 Assembly 让这个工作正常...做了一些事情,但它做了我需要它做的事情。
现在,我正在考虑将这些变成 'class' 对象的列表,但我认为字符串也可以作为参数。
感谢所有提供帮助的人。
class Discover
{
public void DiscoverProperties()
{
var me = Assembly.GetExecutingAssembly().Location;
var dir = Path.GetDirectoryName(me);
var theClasses = dir + @"dllName.dll";
var assembly = Assembly.LoadFrom(theClasses);
var types = assembly.ExportedTypes.ToList();
int propCount;
string propertiesList;
string cName;
string tempString;
foreach (var t in types)
{
propertiesList = "";
propCount = 0;
cName = t.Name;
foreach (var prop in t.GetProperties())
{
propCount++;
tempString = $"{prop.Name}:{prop.PropertyType.Name} ";
propertiesList = propertiesList += tempString;
}
}
}
}
我正在尝试创建一种计算给定 class 属性的方法。 我可能想将 class 名称作为字符串传递,然后可以将该字符串转换为给定 class 的引用。我有 成百上千 的 class es(由 Thrift 生成)可以传入,所以给每个 class 自己的是不切实际的属性 计数器。
我的目的是为 class 提供参数,后者根据用户为每个特定方法需要输入的内容和返回的内容动态创建 UI。为了让自己不必为每个方法手动编写 UI。
有什么好的方法吗?
这是我目前的情况。
class PropertyCounter
{
public int PropertyCounter(string nameOfClass)
{
int count = typeof(nameOfClass).GetProperties().Count();
return count
}
}
您可以将 Activator.CreateInstance
与接受两个字符串的重载一起使用:一个用于类型所在的程序集,另一个用于指定类型(在您的例子中,class) .
https://msdn.microsoft.com/en-us/library/d133hta4(v=vs.110).aspx
public int PropertyCounter(string nameOfClass) {
return Activator.CreateInstance(nameOfAssembly,
nameOfClass).GetType().GetProperties().Count();
}
你应该检查失败
我使用 Assembly 让这个工作正常...做了一些事情,但它做了我需要它做的事情。
现在,我正在考虑将这些变成 'class' 对象的列表,但我认为字符串也可以作为参数。
感谢所有提供帮助的人。
class Discover
{
public void DiscoverProperties()
{
var me = Assembly.GetExecutingAssembly().Location;
var dir = Path.GetDirectoryName(me);
var theClasses = dir + @"dllName.dll";
var assembly = Assembly.LoadFrom(theClasses);
var types = assembly.ExportedTypes.ToList();
int propCount;
string propertiesList;
string cName;
string tempString;
foreach (var t in types)
{
propertiesList = "";
propCount = 0;
cName = t.Name;
foreach (var prop in t.GetProperties())
{
propCount++;
tempString = $"{prop.Name}:{prop.PropertyType.Name} ";
propertiesList = propertiesList += tempString;
}
}
}
}