可能重复:
C# - List <T>或IList <T>
它写的是你应该IList<T>从你的方法返回而不是,List<T>但我找不到任何真正好的理由.我一直在寻找执行此操作的代码,然后调用代码通常执行以下两项操作之一:
new List<T>(returnedIList)它可以使用List上的所有好方法List<T>可以使用List上的所有好方法第一个是笨重的,第二个是抛出(运行时), InvalidCastException如果实现实际上已经改变为其他东西(这使得它完全是愚蠢的).
如果我使用List<T>并且由于某种原因必须将其替换为IList<T>我无法继承的实现,List<T>那么我将得到构建错误并且必须更改一些代码.这可能是非常不可能的,如果发生这种情况,修复工作并不是很多.当然,不值得失去List<T>和/或不得不投射/新List<T>(存在,查找等)的好处,以便让他们回到这种不太可能的情况?
那么,还有其他原因可以归还IList<T>吗?
我们刚刚升级到ASP.NET 4.0,发现requestValidation不再有效.MSDN文档建议我们需要将web.config中的requestValidationMode设置为2.0:
- 4.0(默认值).HttpRequest对象在内部设置一个标志,指示每当访问任何HTTP请求数据时都应触发请求验证.这保证了在请求期间访问诸如cookie和URL之类的数据之前触发请求验证.将忽略配置文件中的pages元素(如果有)或单个页面中的@ Page指令的请求验证设置.
- 2.0.仅对页面启用请求验证,而不是对所有HTTP请求启用.此外,配置文件中的pages元素(如果有)或单个页面中的@ Page指令的请求验证设置用于确定要验证的页面请求.
这对我们有用,但我有点困惑.似乎我们将其置于传统/兼容模式.当然应该可以有4.0行为,但仍然可以选择在页面上关闭它?
昨天尝试读取CSV时,我注意到PowerShell在使用时似乎总是采用美国日期格式[datetime]"date".
我的区域设置都是正确的,并[DateTime]::Parse("date")使用英国日期格式(年/月/ 日).
这是一个错误,还是一个刻意的决定?如果是故意的决定,是否记录在任何地方?
PS D:\> [DateTime]"12/10/2012"
10 December 2012 00:00:00
PS D:\> [DateTime]::Parse("12/10/2012")
12 October 2012 00:00:00
Run Code Online (Sandbox Code Playgroud)
(注意:在美国的机器上,我希望这些物体是相同的,但在英国的机器上却不是这样).
注意:我不想更改格式(它是来自外部源的文件),我不想在输出中格式化日期,我知道我可以使用[DateTime]::Parse().问题是结尾的一点?:-)
我正在尝试为多种语言本地化WinForms应用程序.我正在尝试找到一种方法来设置我的表单标签/按钮文本属性,以便从设计器中的资源文件中读取(而不是必须维护一段以编程方式设置它们的代码).
我发现我可以设置form.Localizable = true,但是然后从表单旁边的文件中读取资源,但是我的许多资源在多个表单中共享.
有没有办法在设计器中将标签的文本设置为存储在项目级resx文件中的值?
为什么:
decimal.Parse("1,2,3,45", CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)
返回12345的小数,但是:
int.Parse("1,2,3,45", CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)
抛出异常?我希望对于相同的文化,逗号的处理方式是相同的.如果decimal.Parse返回12345,为什么不int.Parse返回12345?
我在"Models"文件夹中看到了一些带有Entity Framework DataContext类的项目,但由于它不是真正的模型,所以感觉不对.
目前我的DataContext(以及IDatabaseInitializer类)存在于我的项目的根目录中,但这也让我感到困惑.
是否有一个共同/最佳实践,或者我应该将它们留在根目录或名为Data的文件夹中?
我有一个服务,允许调用者发送命令并异步接收响应.在实际应用程序中,这些操作相当断开(某些操作将发送命令,响应将独立处理).
但是,在我的测试中,我需要能够发送命令,然后在继续测试之前等待(第一个)响应.
响应是使用RX发布的,我对代码的第一次尝试是这样的:
service.SendCommand("BLAH");
await service.Responses.FirstAsync();
Run Code Online (Sandbox Code Playgroud)
这个问题是,FirstAsync只有在await已经被命中之后响应到达时才会起作用.如果服务进程很快,那么测试将挂起await.
我下次尝试解决此问题的方法是FirstAsync()在发送命令之前调用,以便即使它在等待之前到达它也会产生结果:
var firstResponse = service.Responses.FirstAsync();
service.SendCommand("BLAH");
await firstResponse;
Run Code Online (Sandbox Code Playgroud)
但是,这仍然以同样的方式失败.似乎它只是在它被开始聆听时await被击中(GetAwaiter被称为); 所以存在完全相同的竞争条件.
如果我ReplaySubject用缓冲区(或计时器)将我的主题更改为a ,那么我可以"解决"这个问题; 但是在我的生产课程中这样做是没有意义的; 它只会用于测试.
在RX中能够做到这一点的"正确"方法是什么?如何以不会引入竞争条件的方式设置将在流上接收第一个事件的内容?
这是一个以"单线程"方式说明问题的小测试.此测试将无限期挂起:
[Fact]
public async Task MyTest()
{
var x = new Subject<bool>();
// Subscribe to the first bool (but don't await it yet)
var firstBool = x.FirstAsync();
// Send the first bool
x.OnNext(true);
// Await the task that receives the first bool
var b = await …Run Code Online (Sandbox Code Playgroud) 我正在阅读James Michael Hare的博客中关于.NET 4中新的并发集合类的内容,并且正在讨论ConcurrentQueue<T>的页面说:
但是,仍然建议您对空检查调用IsEmpty而不是将Count与零进行比较.
我很好奇 - 如果有理由使用IsEmpty而不是将Count比较为0,为什么在进行任何昂贵的工作计数之前,该类不会在内部检查IsEmpty并返回0?
例如:
public int Count
{
get
{
// Check IsEmpty so we can bail out quicker
if (this.IsEmpty)
return 0;
// Rest of "expensive" counting code
}
}
Run Code Online (Sandbox Code Playgroud)
如果它可以很容易地"修复"而没有副作用,这似乎很奇怪吗?
为什么英语(加勒比海)的文化名称为"en-029"?
我知道"en-CA"用于英语(加拿大),但为什么029?它意味着什么?为什么选择它?
我正在将一些JavaScript移植到Dart.我有window.setTimeout一段代码用于在一段时间后运行回调.在某些情况下,该回调会被取消window.clearTimeout.
Dart的相当于什么?我可以new Future.delayed用来替换setTimeout,但我看不到取消它的方法.我也无法找到clearTimeoutDart的电话.
c# ×7
.net ×6
cultureinfo ×2
asp.net ×1
asp.net-mvc ×1
async-await ×1
asynchronous ×1
collections ×1
culture ×1
dart ×1
dart-async ×1
date ×1
date-format ×1
generics ×1
interface ×1
localization ×1
parsing ×1
powershell ×1
resources ×1
settimeout ×1
winforms ×1