c# - 默认空泛型类型
问题描述
当我尝试使用时prepare("", "");
出现编译错误,为什么?我将默认值设置为null,现在编译器是什么意思。我说如果我没有放任何类,就把它放在那里。
错误 CS0411 无法从用法中推断方法“Program.prepare(string, string, T)”的类型参数。尝试明确指定类型参数。
class Program
{
static void Main(string[] args)
{
var person = prepare("", "");
}
private static Person prepare<T>(string test, string Url, T postData = null)
where T : class
{
//if postdata null do somethnig (post data can be any class it is
//not person class)
//than return person
}
}
class Person
{
public int age { get; set; }
public string name { get; set; }
}
解决方案
问题是编译器需要知道什么是类型T
,即使你没有提供它。想象一下,你的方法可以用提供的参数做任何事情:
private static Person prepare<T>(string test, string Url, T postData = null)
where T : MyClass
{
if(T != null) t.DoSomething();
return new Person();
}
现在编译器必须推断出一个类型T
,因此你必须提供它——即使在运行时你提供null
了 arg。那postData
实际上null
是运行时信息,编译器没有此信息-它仅查看类型,而不是实际值。
除此之外,很难建议您实际需要什么。根据您的实际代码和您正在做的事情,postData
您甚至可能根本不需要泛型。
推荐阅读
- c# - 如何将 NUnit2XmlResultWriter.dll 放入我的项目中以使用它?
- javascript - 为什么我在 puppeteer 中得到 document is not defined 错误?
- scala - Play framework 2.6 数据库注入
- c# - HTTPModule 部分的 Azure 应用服务配置设置
- scala - 如何在 FUTURE 内发送 ACK?
- java - JPA延迟加载在Spring引导中不起作用
- java - 如何为 StepperLayout 导航按钮定义自定义边距
- vuejs2 - 使用 vee-validate 验证特定数量的输入字段
- python - 如何将两个列表转换为 json 格式
- html - CSS 网格中的缩进