所以在我的情况下,我正在使用反射来发现类的结构.我需要能够通过PropertyInfo对象找出属性是否是自动实现的属性.我假设反射API没有公开这样的功能,因为自动属性是C#依赖的,但是有没有解决方法来获取这些信息?
我有一个声明
DateTime ? dt = (string1 == string2) ? null; (DateTime)(txtbox.Text);
Run Code Online (Sandbox Code Playgroud)
我无法编译.原因是:null无法分配DateTime.
所以,我必须声明一个Nullable<DateTime> nullable变量并替换null为nullable.
我不想使用if-statement,我想在一行中做到这一点.
另外,我可以??在这里使用运算符.
(感兴趣的代码行是最后一行,其余的只是完整的代表)
使用下面的代码,我想拿VOTERS直到我超过所需的最大票数,但它在达到最大票数之前就停止了,所以我的选民人数比我想要的少了1个.
在LINQ中是否有一个干净的方式,我可以在它达到最大票数之前获得投票?我知道我可以添加一个选民或者在循环中执行此操作但我很好奇是否有一个很好的方法来使用LINQ.
var voters = new List<Person>
{
new Person("Alice", Vote.Yes ),
new Person("Bob", Vote.Yes),
new Person("Catherine", Vote.No),
new Person("Denzel", Vote.Yes),
new Person("Einrich", Vote.Abstain),
new Person("Frederica", Vote.Abstain),
new Person("Goeffried", Vote.Abstain),
};
voters.Single(c => c.Name == "Alice").Voices = 100;
voters.Single(c => c.Name == "Bob").Voices = 150;
voters.Single(c => c.Name == "Catherine").Voices = 99;
voters.Single(c => c.Name == "Denzel").Voices = 24;
voters.Single(c => c.Name == "Einrich").Voices = 52;
voters.Single(c => c.Name == "Frederica").Voices = 39;
voters.Single(c => c.Name == …Run Code Online (Sandbox Code Playgroud) 假设我的DAL(ORM等)中有这个对象
public class Student
{
public string Name {get;set;}
public string Address {get;set;}
public string Phone {get;set;}
public Parent Parent {get;set;}
}
public class Parent
{
public string Name {get;set;}
public string Address {get;set;}
public string Phone {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我有一个看起来像这样的ViewModel
public class StudentDetailVM
{
public string Name {get;set;}
public string Address {get;set;}
public string Phone {get;set;}
public string ParentName {get;set;}
public string ParentPhone {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
在那种情况下,我需要展平对象.我可以使用Automapper,ValueInjector等工具完成此操作,或者我可以手动执行此操作.如果有许多这样的类要处理,这是一项繁琐的工作,但似乎在这三种方法之间存在性能/开发人员效率权衡.
我在寻找指导时使用Automapper VS Valueinjector VS手动映射.我确定手动映射是最快的,但是多少?
某些场景是否比其他场景慢得多/更快(例如展平等)?
使用混合方法在层之间映射对象是否有意义?
我问的原因是因为创建了一个名为emitmapper的Codeplex项目来解决automapper中的性能问题,我记得看到一条评论说自动化器可能需要花费0.5毫秒来映射一个大类.(需要参考)
我还记得看过一篇文章,该文章介绍了如果用户在70毫秒内加载,而不是90毫秒或更长时间,他们在网站上停留的可能性会更高.(我也在寻找这个链接).如果automapper消耗了我的大部分页面加载时间,加上网络延迟,那么我发现有可能不使用automapper并为我的高容量页面创建手动类,并坚持使用混合方法.
一句话:我会自己运行测试,但是我不太了解.NET内部结构来创建可以用作可重用指南的准确结果.
所以关于来自SO和其他互联网站点的日志记录,最佳响应似乎是:
void DoSomething() {
Logger.Log("Doing something!");
// Code...
}
Run Code Online (Sandbox Code Playgroud)
现在通常你会避免静态方法,但在记录(特殊情况)的情况下,这是最简单和最干净的路线.在静态类中,您可以通过配置文件/框架轻松注入实例,以获得与DI相同的效果.
我的问题来自单元测试的角度.
在上面的示例代码中,想象DoSomething()的意思是将两个数字加在一起.我会为这个罚款写单元测试.伐木怎么样?
我是否会为日志记录编写单元测试(但是对于记录器本身使用模拟实例)?我知道如果是这种情况我将不得不编写一个集成测试来证明记录器实际写入日志文件,但我不确定.
在测试驱动开发之后(我这样做)我需要进行单元测试才能决定接口没有?
有什么建议?
灵感来自这个问题.
简短版本:M(dynamic arg)如果只有一个重载M或所有重载M具有相同的返回类型,为什么编译器不能找出编译时类型?
根据规范,§7.6.5:
如果至少满足下列条件之一,则动态绑定调用表达式(第7.2.2节):
primary-expression具有编译时类型dynamic.
可选参数列表的至少一个参数具有编译时类型dynamic,而primary-expression没有委托类型.
这是有道理的
class Foo {
public int M(string s) { return 0; }
public string M(int s) { return String.Empty; }
}
Run Code Online (Sandbox Code Playgroud)
编译器无法弄清楚编译时的类型
dynamic d = // dynamic
var x = new Foo().M(d);
Run Code Online (Sandbox Code Playgroud)
因为直到运行时才会知道M调用了哪个重载.
但是,为什么编译器无法计算编译时类型,如果M只有一个重载或所有重载M返回相同的类型?
我想了解为什么规范不允许编译器在编译时静态地键入这些表达式.
考虑以下结构:
IEnumerable<IEnumerable<int>> collection = new[] {
new [] {1, 2, 3},
new [] {4, 5, 6},
new [] {7, 8, 9}
};
Run Code Online (Sandbox Code Playgroud)
如何枚举此集合,以便获取IEnumerable<int>由第一项,第二项等组成的集合?
也就是说,{1,4,7},{2,5,8},......
(虽然我选择的实现是int[]对象,假设你只有IEnumerable<int>功能.谢谢.)
如果无法将字符串解析为int,是否有一些返回null的方法?
有:
public .... , string? categoryID)
{
int.TryParse(categoryID, out categoryID);
Run Code Online (Sandbox Code Playgroud)
得到"无法从'输出字符串'转换为'输出int'
该怎么办?
编辑:
由于asp.net约束不再相关是解决问题的方法
/ M
我有一个像这样定义的枚举类型:
type tags =
| ART = 0
| N = 1
| V = 2
| P = 3
| NULL = 4
Run Code Online (Sandbox Code Playgroud)
有办法for ... in tags do吗?
这是我得到的错误:
tags未定义值,构造函数,命名空间或类型
我有些情况下我不关心抛出什么异常(只要抛出一些异常).不幸,
Assert.Throws<Exception>(someDelegate);
Run Code Online (Sandbox Code Playgroud)
除非完全Exception抛出一个(因此不是派生类的实例)的实例,否则不会通过.我知道我可以获得我想要的行为
Exception exception = Record.Exception(someDelegate);
Assert.NotNull(exception);
Run Code Online (Sandbox Code Playgroud)
但它没有正确的解读.我是否在xUnit中缺少具有我想要的行为的东西?这是两个测试,表明我的意思:
[Fact]
public void Throws_exception_and_passes() {
Exception exception = Record.Exception(
() => { throw new InvalidOperationException(); }
);
Assert.NotNull(exception);
}
[Fact]
public void Throws_exception_and_fails() {
Assert.Throws<Exception>(
() => { throw new InvalidOperationException(); }
);
}
Run Code Online (Sandbox Code Playgroud) c# ×8
.net ×7
linq ×2
assert ×1
automapper ×1
datetime ×1
dynamic ×1
emitmapper ×1
enums ×1
f# ×1
logging ×1
nullable ×1
reflection ×1
sql ×1
tdd ×1
tryparse ×1
unit-testing ×1
xunit ×1