2017-06-12 80 views
0

我有这样的:泛型没有特定类型

class Program 
    { 
     static void Main(string[] args) 
     { 

      var result = new Result<int, bool> { success = true, Data = 88 }; 
      var result2 = new Result<string, bool> { success = true, Data = "Niels" }; 


      Console.WriteLine(result2.success); 
      Console.WriteLine(result2.Data); 

      Console.ReadKey(); 
     } 
    } 

    public class Result<T, TU> 
    { 
     public TU success { get; set; } 
     public T Data { get; set; } 


    } 

所以这是具有两个属性的简单的泛型类。

我只是想知道,如何让这样的:

var result = new Result<int, bool> { success = true, Data = 88 }; 

更通用的:)。因为你还是要“说”的返回类型是什么:<int, bool>

所以是有可能做到这一点的例子是这样的:

<T var1, T var2> ? 

谢谢

所以,我的意思是这样:

var result = new Result<T var1, T var2> { success = true, Data = 88 }; 

这样就可以填补的成功和任何你想要的数据(字符串,整数,浮点,布尔)..

+0

你的意思是你想创建一个'Result'的实例,而不必明确写出泛型? – grek40

+0

'公共结果 f(T t,TU tu)=>新结果(t,tu);''是更通用的。但编译器必须从某处获取类型参数。你必须更具体地说明''是什么意思。 –

+0

构造函数不能自动推断泛型类型参数。但是方法*可以*,所以使用grek40提供的工厂方法。 – HimBromBeere

回答

6

您可以从给定的参数自动使用工厂方法来解决类型:

public static class ResultFactory 
{ 
    public static Result<T, TU> Create<T, TU>(TU success, T data) 
    { 
     return new Result<T, TU> { success = success, Data = data }; 
    } 
} 

var result = ResultFactory.Create(true, 88); 
var result2 = ResultFactory.Create(true, "Niels"); 
+0

谢谢。但创建来自哪里? – LikeToDo

+1

@默认谢谢,我可能永远不会再在答案窗口中写代码而不是实际的IDE – grek40

+1

@LikeToDo这是'Factory'类中的方法名 – Default

0

因为你还是要“说”的返回类型是什么:<int, bool>

是的,您将不得不指定类型T,TU,并且不能保持类型不变。类型必须在编译时关闭。因此,将它称为<T var1, T var2>将不可能,除非它被包含在另一个通用类型或方法中

相关问题