Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动生成只将字段初始化为传递参数的构造函数?_C#_Visual Studio_Code Generation - Fatal编程技术网

C# 自动生成只将字段初始化为传递参数的构造函数?

C# 自动生成只将字段初始化为传递参数的构造函数?,c#,visual-studio,code-generation,C#,Visual Studio,Code Generation,是否有某种方法可以在visual studio中为此类自动生成明显的2参数构造函数 class Thing { public readonly string a; public readonly Object b; } 我想你应该使用: new Thing { a = ..., b = ... } 在这种情况下使用语法,但在上述只读字段中不起作用。拥有构造函数的另一个好处是你不能忘记一个字段。你可能想看看T4模板。编写一个模板来迭代只读属性名称和类型的列表,并为属性和构造函数创建必要

是否有某种方法可以在visual studio中为此类自动生成明显的2参数构造函数

class Thing {
  public readonly string a;
  public readonly Object b;
}
我想你应该使用:

new Thing { a = ..., b = ... }

在这种情况下使用语法,但在上述只读字段中不起作用。拥有构造函数的另一个好处是你不能忘记一个字段。

你可能想看看T4模板。编写一个模板来迭代只读属性名称和类型的列表,并为属性和构造函数创建必要的代码,这将是相当简单的

T4模板内置于Visual Studio中。查看Scott Hanselman的关于T4模板的详细信息


还有其他产品可以自动执行这种重构。Resharper就是其中之一,但它不是免费的。

有,支持此功能。你选择“生成构造函数”,选择你想要包含的字段,你就得到了你的构造函数。

很抱歉,这篇文章没有任何帮助,但我就是忍不住

我担心通过使用T4模板之类的东西,您(可能)会失去IntelliSense,这可能不是您想要付出的代价。您可能会编写一个VS.NET宏来自动生成构造函数的代码(我相信代码模型应该为您提供足够的信息)

现在,这里是文章中无用的部分——如果你对C#不必要的冗长感到厌烦,也许你可以尝试另一种.NET语言。在F#中,您可以编写隐式构造函数,其参数自动成为(只读)字段:


在真实场景中,您可能不需要指定类型,因为F#可以根据以后的使用情况自动推断它们。如果您已经熟悉.NET库,那么尝试F#并没有那么困难。

很抱歉这里的文字太多;不知何故,这里忽略了段落。你一针见血,我喜欢函数式编程;)Haskell让我养成了一种习惯,可以制作几乎所有性能不关键的只读内容。我还没有看过F#,但也许我应该看看F#是否适合我所为之编写代码的人(我想这种担心与Haskell的担心是一样的,不过可能不那么严重:他们找不到其他会说F#的程序员)。C#在FP方面并不是那么糟糕,尽管我缺少总和类型。有各种免费产品为T4提供intellisense。e、 g.有形工程的T4Editor@FunctorSalad当前位置当我看到你的昵称时,我希望你知道哈斯克尔:-)。我想我的回答可能对那些仍然生活在C#世界的人有用,他们遇到了这个问题。我同意C有很多函数功能(毕竟,我写了一本关于C和F函数编程的书)。求和类型和模式匹配当然很好。选择此作为答案,因为这就是我最终要做的,尽管其他建议也很好:)
type Thing(a:string, b:Object) = 
  // members can use 'a' and 'b' directly - here is one example:
  member this.GetInfo() = 
    "Some info: " + a + (b.ToString())