【发布时间】:2017-12-31 03:51:42
【问题描述】:
假设我有以下两个课程,理想情况下可以做我想做的事:
Foo.cs:
public class Foo
{
private int Type { get; set; } = 0;
public FooHelper FooHelper
{
get
{
switch (Type)
{
case 1:
return new FooHelper<Guid>("Foo", "Bar", "foobar", "", Guid.NewGuid());
case 2:
default:
return new FooHelper<int>("Bar", "Foo", "", "", 11);
}
}
}
public Foo(int type)
{
Type = type;
}
}
FooHelper.cs:
public class FooHelper<T> where T : struct
{
public string Controller { get; set; } = string.Empty;
public string Action { get; set; } = string.Empty;
public string Area { get; set; } = string.Empty;
public string NameParameter { get; set; } = string.Empty;
public T IdParameter { get; set; } = default(T);
public FooHelper() { }
public FooHelper(string controller, string action, string area, string name, T id)
{
Controller = controller;
Action = action;
Area = area;
NameParameter = name;
IdParameter = id;
}
}
根据作为非泛型类 Foo 的构造函数的参数传入的整数值,属性 FooHelper 返回基于泛型类 FooHelper 的新实例一个 Guid 或一个 int。
但是,如果不使 Foo 也通用,我似乎无法完成这项工作,这是我不想要的。我得到的错误是在 FooHelper 的属性线上,说明:
Using the generic type 'FooHelper<T>' requires 1 type arguments
这是有道理的,但我当时不知道。我想在 Foo 的构造函数中确定 FooHelper 的类型。
是我遗漏了什么,还是在这种情况下无法做我想做的事?
【问题讨论】:
-
我没有看到任何 'ProfileHelper
' -
你知道你的泛型类对 T 有约束吗? (
where T: struct)? -
这与 op 的问题并不真正相关,因为他的代码 @RomanAnanyev 目前没有任何问题