C# 在这种情况下,我如何利用类型推断?
我正绞尽脑汁试图让它工作,但我不知道如何告诉编译器类型,以避免显式地声明它们 考虑这样一个简单的界面:C# 在这种情况下,我如何利用类型推断?,c#,generics,type-inference,C#,Generics,Type Inference,我正绞尽脑汁试图让它工作,但我不知道如何告诉编译器类型,以避免显式地声明它们 考虑这样一个简单的界面: interface ICommand<TResult> { } 在这种情况下,为什么编译器无法推断类型?如果可能的话,我如何更改代码以启用推断?我想这正是您需要解决的问题: public int SomeMethod() { return _commandProcessor.Process(new SomeCommand()); } 听起来你想知道为什么C不推断进程的返
interface ICommand<TResult> { }
在这种情况下,为什么编译器无法推断类型?如果可能的话,我如何更改代码以启用推断?我想这正是您需要解决的问题:
public int SomeMethod()
{
return _commandProcessor.Process(new SomeCommand());
}
听起来你想知道为什么C不推断进程
的返回类型是int
。从逻辑上讲,int
是它能够生成的唯一返回类型。然而,Process
不需要知道它的参数的具体类型来实现这一点
interface ICommandProcessor
{
TResult Process<TResult>(ICommand<TResult> command);
}
接口ICommandProcessor
{
TResult进程(ICommand命令);
}
这足以推断出进程
的返回类型,进程
对于知道具体类型没有用处,实现ICommand
,从技术上讲,进程
无法知道具体类型,除非在类型约束中指定它(其中TCommand:SomeCommand
),反正也没用
推断
命令的类型是没有意义的,因此您提出的问题不需要解决方案。它只是需要完全避免。你为什么还要这样做?知道那种类型没有意义。我甚至不确定短语“了解该类型”在这种情况下是否有意义。为什么不在ICommandProcessor
中使用targetprocess(ICommand命令)
?看起来你过于复杂化了你的泛型参数,然后把它们限制在特定的类型上。@RonBeyer的建议会一直起作用,直到你遇到一个SomeOtherCommand:ICommand,ICommand
,不管你怎么做,这个方法都会有问题。
class Consumer
{
private readonly ICommandProcessor _commandProcessor;
Consumer(ICommandProcessor commandProcessor)
{
_commandProcessor = commandProcessor;
}
public int SomeMethod()
{
return _commandProcessor.Process(new SomeCommand());
}
}
public int SomeMethod()
{
return _commandProcessor.Process(new SomeCommand());
}
interface ICommandProcessor
{
TResult Process<TResult>(ICommand<TResult> command);
}