我已经TryParse
通过值或名称编写了枚举代码,如下所示.如何扩展此代码以包含使用Flags
属性解析枚举?
public static bool TryParse<T>(this T enum_type, object value, out T result)
where T : struct
{
return enum_type.TryParse<T>(value, true, out result);
}
public static bool TryParse<T>(this T enum_type,
object value, bool ignoreCase, out T result)
where T : struct
{
result = default(T);
var is_converted = false;
var is_valid_value_for_conversion = new Func<T, object, bool, bool>[]{
(e, v, i) => e.GetType().IsEnum,
(e, v, i) => v != null,
(e, v, i) => Enum.GetNames(e.GetType()).Any(n => String.Compare(n, v.ToString(), …
Run Code Online (Sandbox Code Playgroud) 如果我正在编写一个包含多个构造函数参数的类,例如:
class A{
public A(Dependency1 d1, Dependency2 d2, ...){}
}
Run Code Online (Sandbox Code Playgroud)
我通常会创建一个"参数持有者"类的类,如:
class AArgs{
public Dependency1 d1 { get; private set; }
public Dependency2 d2 { get; private set; }
...
}
Run Code Online (Sandbox Code Playgroud)
然后:
class A{
public A(AArgs args){}
}
Run Code Online (Sandbox Code Playgroud)
通常,使用DI容器我可以为依赖关系配置构造函数并解析它们,因此当构造函数需要更改时,影响最小.
这被认为是反模式和/或反对这样做的任何论据吗?
对于C#属性,我可以这样做:
public class Employee{
public string Name { get; private set; }
public Employee(string name){
Name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
这意味着Name属性可以在Employee类中设置并且可以公开读取.
但是,如果我想将集合限制在Employee类的构造函数中,我需要做:
public class Employee{
public readonly string Name = String.Empty;
public Employee(string name){
Name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,对于这种情况,我不得不将属性更改为字段.
是否有任何理由在C#中不可能/允许:
public class Employee{
public string Name { get; private readonly set; }
public Employee(string name){
Name = name;
}
}
Run Code Online (Sandbox Code Playgroud)
IMO这将允许我们拥有只能在构造函数中设置的属性,并且不需要我们将属性更改为字段...
谢谢!