我正在使用反射来遍历一个Type属性并将某些类型设置为默认值.现在,我可以对类型进行切换并default(Type)明确设置,但我宁愿在一行中进行.有默认的程序化等价物吗?
我有以下从外部方收到的JSON字符串.
{
"team":[
{
"v1":"",
"attributes":{
"eighty_min_score":"",
"home_or_away":"home",
"score":"22",
"team_id":"500"
}
},
{
"v1":"",
"attributes":{
"eighty_min_score":"",
"home_or_away":"away",
"score":"30",
"team_id":"600"
}
}
]
}
Run Code Online (Sandbox Code Playgroud)
我的映射类:
public class Attributes
{
public string eighty_min_score { get; set; }
public string home_or_away { get; set; }
public string score { get; set; }
public string team_id { get; set; }
}
public class Team
{
public string v1 { get; set; }
public Attributes attributes { get; set; }
}
public class RootObject
{ …Run Code Online (Sandbox Code Playgroud) 我想编写一个函数,它可以验证给定值(作为字符串传递)对可能的值enum.在匹配的情况下,它应该返回枚举实例; 否则,它应该返回一个默认值.
该函数可能不在内部使用try/ catch,它排除使用Enum.Parse,在给定无效参数时抛出异常.
我想使用TryParse函数的一些东西来实现这个:
public static TEnum ToEnum<TEnum>(this string strEnumValue, TEnum defaultValue)
{
object enumValue;
if (!TryParse (typeof (TEnum), strEnumValue, out enumValue))
{
return defaultValue;
}
return (TEnum) enumValue;
}
Run Code Online (Sandbox Code Playgroud) 我今天试图做一些常规测试,并且Assembly.GetTypes()当我偶然发现某事时,将所有类型都放入一个程序集中(通过调用):
System.RuntimeType:[First.Namespace.FirstClass]
Run Code Online (Sandbox Code Playgroud)
每当我尝试比较那种类型时typeof(FirstClass),它们就不相同.所以,当我试图找到包含FirstClass作为通用参数的所有类型时,我找不到任何类型.
System.RuntimeType和之间有什么区别System.Type?
有什么方法可以解决我的问题吗?
我想区分以下情况:
int)int?)string) - 可选地,我不关心这是否映射到上面的(1)或(2)我已经提出了以下代码,它适用于案例(1)和(2):
static void Foo<T>(T a) where T : struct { } // 1
static void Foo<T>(T? a) where T : struct { } // 2
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试像这样检测case(3),它就不会编译:
static void Foo<T>(T a) where T : class { } // 3
Run Code Online (Sandbox Code Playgroud)
错误消息是类型'X'已经定义了一个名为'Foo'的成员,它具有相同的参数类型.好吧,不知何故,我无法在where T : struct和之间产生影响where T : class.
如果我删除第三个函数(3),以下代码也不会编译:
int x = 1;
int? y = 2;
string z = "a";
Foo (x); // OK, …Run Code Online (Sandbox Code Playgroud) 我试图坚持一般的命名约定,如开发类库的设计指南中描述的那些.我将每种类型放入其自己的源文件中(部分类将按照部分类文件的命名约定中所述分成几个文件),使用类型名称作为文件名.
例子:
namespace Demo.Bla // project
{
enum FlowDirection { } // in file FlowDirection.cs
class LayoutManager { } // in file LayoutManager.cs
}
namespace Demo.Bla.LayoutControllers // folder LayoutControllers in project
{
class StackPanelLayoutController { } // in file LayoutControllers/StackPanelLayoutController
}
Run Code Online (Sandbox Code Playgroud)
但我不确定我是否想出了一种聪明的方法来命名包含泛型类的源文件.假设我有以下类,例如:
namespace Demo.Bla.Collections // folder Collections
{
class Map<T> { } // in file Map.cs (obviously)
class Bag { } // in file Bag.cs (obviously)
class Bag<T> : Bag { } // also in file …Run Code Online (Sandbox Code Playgroud) 我有一个使用AjaxControlToolkit.dll和Log4Net.dll的网站.
当我尝试在VS 2010上运行性能分析工具时,它会给我以下警告:
AjaxControlToolkit.dll已签名并且检测它将使其签名无效.如果您在没有仪器后事件的情况下继续重新签名二进制文件,则可能无法正确加载.
现在,如果我选择继续而不重新签名,则分析将开始,但程序集不会加载并提供ASP.NET异常.
这两种方法Thread.Suspend()和Thread.Resume()是因为.NET 2.0过时.为什么?什么是其他替代品和任何例子?
我正在寻找与此完全相同的行为
git add -i -p
Run Code Online (Sandbox Code Playgroud)
但是我没有从我的工作目录中编写提交,而是想从提交的(部分)编写我的工作目录.我怎样才能做到这一点 ?
我的用例是我有几个不同的功能在一个提交中组合在一起,我想逐个测试它们
使用cherry-pick -n并不是真正令人满意,因为它让我完成了删除所有不需要的代码的肮脏工作.我真的只想选择我想要测试的选定更改.
我有两个集合a和b.我想计算a或者b两者中的项目集合,而不是两者中的项目集合(逻辑异或).有了LINQ,我可以想出这个:
IEnumerable<T> Delta<T>(IEnumerable<T> a, IEnumerable<T> b)
{
return a.Except (b).Union (b.Except (a));
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否还有其他更有效或更紧凑的方法来产生两个集合之间的差异.
编辑1:Jon Skeet发布了第一个解决方案,它不依赖于a来保留项目的顺序HashSet.我想知道是否有其他方法可以保持输出的顺序a和b输出.
c# ×7
reflection ×2
.net-2.0 ×1
c#-4.0 ×1
class ×1
constraints ×1
default ×1
enums ×1
generics ×1
git ×1
ienumerable ×1
json ×1
json.net ×1
linq ×1
profiling ×1
set-theory ×1
strongname ×1
struct ×1