Tag: 编码风格的

使用generics类型参数代替System.Type类型的参数。 这是一种气味吗?

我经常看到(例如在许多模拟库中)方法,其中使用generics类型参数代替System.Type类型的参数。 我特别谈到generics类型仅用于typeof(T)操作的情况(即,在方法中的任何地方都没有使用类型T的实例,并且T不用于返回类型或其他参数)。 例如,考虑以下方法: public string GetTypeName(System.Type type) { return type.FullName; } 这种方法通常伴随着通用版本: public string GetTypeName() { return GetTypeName(typeof(T)); } 问题是一种不好的做法还是一种好的做法? 这是一种语法糖还是更多呢? 我认为这是滥用语言function来缩写对接受System.Type类型的参数的方法的调用 你觉得这有气味吗? 这应该避免吗? 或者这实际上是一种很好的做法(提供一种通用方法作为避免输入typeof()的快捷方式)。 以下是使用我能想到的这种模式的一些实际问题: 如果添加了非System.Type类型的参数 – 可能需要将方法重写(如果参数的顺序在语义上很重要)到非generics版本(否则一些参数将是generics类型参数,而一些参数将是常规参数)。 它需要两个方法(对于在编译时未知类型的情况,通用和非通用)。 因此增加了几乎毫无意义的unit testing。 另一方面,这是一种常见的做法(大多数总是正确的,对吗?)但更重要的是,当我对需要在编译时知道System.Type类型的单个参数的代码进行Extract Method重构时,ReSharper更喜欢该签名(和我学会了接受他们的建议,虽然不是出于信仰,但认真)。

在方法中编写“返回”的完美方式是什么?

我不喜欢方法有几条返回线。 所以我用字符串结果创建了一个返回值 – 在每种情况下我都写了结果=某事…… 但是当我编写“try-catch”机制时,我必须设置公共字符串结果 。 因为,如果我在try中返回一个结果,编译器将启动错误,并说并非所有代码都有返回值。 如果我将result = string.Empty写入方法的结尾,resharper说,它是无法访问的代码。 所以,这里有一个例子,这是我的问题; “在一种方法中写”回归“的完美方式是什么?” public static string PingThatAddress(string hostAddress) { try { Ping ping = new Ping(); PingReply pingreply = ping.Send(hostAddress); string result; if (pingreply != null && pingreply.Status.ToString() != “TimedOut”) { result = “Address: ” + pingreply.Address + “\r” + “Roundtrip Time: ” + pingreply.RoundtripTime + […]

关于try-catch块的想法

您对代码的看法如下: public void doSomething() { try { // actual code goes here } catch (Exception ex) { throw; } } 我看到的问题是没有处理实际错误,只是将exception抛在另一个地方。 我发现调试起来比较困难,因为我没有得到实际问题所在的行号。 所以我的问题是为什么这会好? —-编辑—- 从答案来看,大多数人都认为这样做毫无意义,没有捕获自定义或特定exception。 这就是我想要评论的内容,当没有抓住特定的例外时。 我可以看到实际使用捕获的exception执行操作的重点,而不是此代码的方式。

接口属于自己的文件

按照经验,我通常将类放在自己的文件中。 Visual Studio似乎鼓励这一点,但接口方面的内容是什么? 例如 我有Class Foo实现接口Bar public interface IBar { } public class Foo : IBar { } 将这些组合在同一个文件中似乎很自然,直到另一个类实现接口,但是将文件专用于2行代码似乎过多但正确。 什么是合适的?

使用块使用块

可能重复: 如果我不在我的C#控制台应用程序中关闭System.Diagnostics.Process会发生什么? 由于System.Diagnostics.Processinheritance自实现IDisposable Component ,我是否应该始终using块创建Process ? 例如,这……: using (var process = new Process()) { process.StartInfo.FileName = “some process.exe”; process.Start(); process.WaitForExit(); } ……而不是这个: var process = new Process { StartInfo = { FileName = “some process.exe” } }; process.Start(); process.WaitForExit(); 我问,因为我很少看到Process出现在using块中; 例如, Process的MSDN页面不使用它。 使用对象初始化程序也很有帮助。 如果我应该使用它,那么我应该去“改造”它到我现有的代码库吗? 如果没有这样做会有什么后果? (假设在每种情况下都正确调用WaitForExit() 。)

缩进lambda和嵌套动作

当使用lambdas时,通常是在TPL上,我会因缩进而迷失…是否有一些最佳实践来格式化? 例如,请使用以下代码: Task t1 = factory.StartNew(() => { DoSomething(); } .ContinueWith((t2) => { DoSomethingWhenComplete(); }, TaskContinuationOptions.OnlyOnRanToCompletion) ).ContinueWith((t3) => { DoSomethingOnError(); }, TaskContinuationOptions.OnlyOnFaulted); 我的“缩进”是否正确? 在该示例中,我想执行t1,然后如果它完成OK,则执行t2,并在执行t3时执行错误。 但看起来好像t3是t2的延续,而不是来自t1 …我需要在该代码中修复什么才能获得正确的行为? 我想我已经迷失在那个缩进或遗漏了一些括号……

访问您自己类中的成员:是否使用(自动)属性?

我已经将这个“问题”创建为社区维基,因为没有正确或错误的答案。 我只想知道社区对这个具体问题的看法。 当你有一个带有实例变量的类,并且你还创建了只是这些实例变量的getter和setter的属性时,你应该使用你自己的类中的属性,还是应该总是使用实例变量? 在C#3.0中拥有自动属性使得这个决定变得更加困难。 使用属性: public class MyClass { private string _name; // could be an auto-property of-course public string Name { get { return _name; } set { _name = value; } } public void Action() { string localVar = Name; // … Name = “someValue”; // … } } 使用实例变量: public class MyClass […]

使ReSharper尊重您对代码订单的偏好

与我的另一个问题相关: 布局C#类的最佳方法是什么? 在ReSharper中是否有一种方法可以定义您希望成员进入的顺序,以便ReSharper能够维护它?

OnDataBinding vs Inline:优点,缺点和开销

我想我会问这个问题,看看为什么很多例子和人们更喜欢在aspx代码中使用内联数据绑定而不是在使用WebForms时实现OnDataBinding事件。 对于任何数据绑定控件(例如,Repeater,GridView等),我总是为字段级控件实现OnDataBinding方法,如果我需要做任何不是开箱即用的内容(例如,我需要做一个Eval)。 我看到的大多数示例都使用内联<%#语法在aspx页面中使用了正确的代码。 内联ASP.NET代码示例: <asp:Literal ID="litExample" runat="server" Text='’ /> 我更喜欢这样做的例子: 在aspx中: 在codebehind .cs中: protected void litExample_DataBinding(object sender, System.EventArgs e) { Literal lit = (Literal)(sender); lit.Text = string.Format(“{1} – {2}”, Eval(“ExampleField”).ToString(), Eval(“ExampleField2”).ToString()); } 我个人更喜欢codebehind方法,因为它保持我的aspx页面干净,我没有所有这些内联代码,而下一个人只知道总是查看.cs文件中的代码更改。 表示和代码的分离也以这种方式保持得更好,因为HTML只是占位符,而代码绑定正在确定实际控制的内容。 现在这些是非常基本的例子。 该字段可以是您想要使用前导0格式化的整数或需要特定格式等的DateTime。它还可以采用所有类型的操作和代码来获取应存储在“Text”属性中的finally值。结束。 如果使用内联代码,在哪里绘制线并将其移动到代码隐藏? 这样做的优点和缺点是什么? 一个人比另一个人花费更多的开销吗? 编辑注意:我不是在为一个只在页面上的控件赋值,而是一个正在数据绑定的控件,因为它存在于转发器模板或gridview项目模板等中…显然是一个文字坐在页面上你可以只在代码中分配。 编辑注意:我想我会收集更多响应,特别是关于开销。 大多数人不使用OnDataBinding事件吗?

是否可以格式化工具提示文本(粗体,下划线等)?

我想在WinForms应用程序中制作一些标准工具提示粗体段落。 这可能吗? 如果没有,是否有(免费)工具提示组件允许我设置样式(最好也是边框和背景)? 谢谢!