相关疑难解决方法(0)

将参数传递给模板化类型的C#generic new()

我正在尝试在添加到列表时通过其构造函数创建类型为T的新对象.

我收到编译错误:错误消息是:

'T':创建变量实例时无法提供参数

但我的类确实有一个构造函数参数!我怎样才能做到这一点?

public static string GetAllItems<T>(...) where T : new()
{
   ...
   List<T> tabListItems = new List<T>();
   foreach (ListItem listItem in listCollection) 
   {
       tabListItems.Add(new T(listItem)); // error here.
   } 
   ...
}
Run Code Online (Sandbox Code Playgroud)

.net c# generics new-operator

395
推荐指数
10
解决办法
19万
查看次数

将参数和字符串传递给Activator.CreateInstance

我有一个名为'FileParser'的程序集,它包含类'FileAutoSys',它符合接口'IFile'.

namespace FileParser
{
    class FileAutoSys : IFile
    {
        public FileAutoSys(ref string[] args)
        {
            ...
        }
        public FileAutoSys(){}
        public void SetValues(ref string[] args)
        {
            *[same code as in the non-default constructor]*
        }
}
Run Code Online (Sandbox Code Playgroud)

我试图使用Activator.CreateInstance创建FileAutoSys的实例,但我有问题将args传递给它的构造函数.

我可以创建一个实例并使用两步过程设置其状态:

IFile file = (IFile)Activator.CreateInstance(Type.GetType("FileParser.File" + args[0]));
file.SetValues(ref args);
Run Code Online (Sandbox Code Playgroud)

其中args [0]是字符串'AutoSys'.

但我不知道如何一步到位.我用谷歌搜索,但我找不到任何明确的例子,说明它是如何完成的.MSDN建议我使用重载:

Activator.CreateInstance(Type, Object[])
Run Code Online (Sandbox Code Playgroud)

但是,没有用,它没有给出任何例子,而且我缺乏C#知识让人感到困惑.

我希望有人可以向我解释如何在我的例子中使用上述重载.我并不是要求有人为我做这件事,因为我想了解我应该做些什么.

c#

0
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×2

.net ×1

generics ×1

new-operator ×1