C#查找.dll

时间:2018-03-08 19:58:59

标签: c# parameter-passing .net-assembly system.reflection

我试图创建一个计算给定类属性的方法。 我想将类名作为字符串传递,然后可以将字符串转换为给定类的引用。我有几百个类(由Thrift生成)可以传入,因此为每个类提供自己的属性计数器是不切实际的。

我的目的是为一个类提供参数,该类根据用户需要为每个特定方法输入的内容以及将返回的内容动态创建UI。为了避免必须为每种方法手动编写UI。

有没有好办法呢?

这是我到目前为止所拥有的。

class PropertyCounter
{
    public int PropertyCounter(string nameOfClass)
    {

        int count = typeof(nameOfClass).GetProperties().Count();
        return count
    }
}   

2 个答案:

答案 0 :(得分:0)

我使用Assembly开始工作了......采取了一些行动,但它做了我需要它做的事。

现在,我正在考虑将这些变成一个“类”对象的列表,但我认为一个字符串对于一个参数也可以正常工作。

感谢所有提供帮助的人。

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;
            }
        }
    }
}

答案 1 :(得分:-1)

你可以使用Activator.CreateInstance,重载接受两个字符串:一个用于类型所在的程序集,另一个用于指定类型(在你的情况下是类)。

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();
}

你应该检查失败