是否可以使用匿名类型实现接口.我有一段我想要工作的代码,但不知道该怎么做.
我有几个答案要么说不,要么创建一个实现接口的类构造新的实例.这不是很理想,但我想知道是否有一种机制可以在界面上创建一个瘦动态类,这将使这个变得简单.
public interface DummyInterface
{
string A { get; }
string B { get; }
}
public class DummySource
{
public string A { get; set; }
public string C { get; set; }
public string D { get; set; }
}
public class Test
{
public void WillThisWork()
{
var source = new DummySource[0];
var values = from value in source
select new
{
A = value.A,
B = value.C + "_" + value.D
};
DoSomethingWithDummyInterface(values);
}
public …
Run Code Online (Sandbox Code Playgroud) 我希望能够在C#控制台应用程序中捕获CTRL+ C,以便我可以在退出之前执行一些清理.这样做的最佳方式是什么?
我安装了Windows 8,Visual Studio 2012,但没有安装v4.5目录%WINDIR%\Microsoft.NET\Framework
.
我做错了什么,或者.NET 4.5与其他人有什么不同?
如果是因为我没有安装这些工具,是否有一套不同的工具可供下载?据我所知,我能够构建.NET 4.5应用程序.
我知道可以使用using关键字在C#中定义别名.
例如
using ResponseKey = System.ValueTuple<System.Guid, string, string>;
Run Code Online (Sandbox Code Playgroud)
但是,是否可以使用值元组的新语法定义一个?
using ResponseKey = (Guid venueId, string contentId, string answer);
Run Code Online (Sandbox Code Playgroud)
此语法似乎不起作用.应该是?
我正在寻找一种方法来允许C#对象中的属性只设置一次.编写代码很容易,但我宁愿使用标准机制(如果存在).
public OneShot<int> SetOnceProperty { get; set; }
我想要发生的是,如果属性尚未设置,则可以设置属性,但如果之前已设置,则抛出异常.它应该像Nullable值一样运行,我可以检查它是否已设置.
我正在尝试计算一组值的中位数,但我不想存储所有值,因为这可能会破坏内存需求.有没有一种计算或近似中位数的方法,而不存储和排序所有单个值?
理想情况下,我想编写我的代码,如下所示
var medianCalculator = new MedianCalculator();
foreach (var value in SourceData)
{
medianCalculator.Add(value);
}
Console.WriteLine("The median is: {0}", medianCalculator.Median);
Run Code Online (Sandbox Code Playgroud)
我只需要实际的MedianCalculator代码!
更新:有些人问我正在尝试计算中位数的值是否具有已知属性.答案是肯定的.一个值从约-25到-0.5以0.5为增量.另一个也是从-120到-60的0.5增量.我想这意味着我可以为每个值使用某种形式的直方图.
谢谢
缺口
有没有办法忽略对mercurial提交中某些文件的更改?
我有一个特定的情况,我们有一个默认的oracle tnsnames.ora文件,指向127.0.0.1,但有些开发人员会修改它指向其他系统,但我们不想更改默认文件.
在subversion中,我简单地将它添加到ignore-on-commit更改列表中.有没有办法在mercurial这样做?
如何在代码中创建silverlight数据模板?我见过很多WPF的例子,但Silverlight没有.
编辑:这是我现在使用的代码,基于以下圣地亚哥的回答.
public DataTemplate Create(Type type)
{
return (DataTemplate)XamlReader.Load(
@"<DataTemplate
xmlns=""http://schemas.microsoft.com/client/2007"">
<" + type.Name + @" Text=""{Binding " + ShowColumn + @"}""/>
</DataTemplate>"
);
}
Run Code Online (Sandbox Code Playgroud)
这非常好用,并允许我动态更改绑定.
在C#我可以这样做:
var castValue = inputValue as Type1
Run Code Online (Sandbox Code Playgroud)
在F#中,我可以这样做:
let staticValue = inputValue :> Type1
let dynamicValue = inputValue :?> Type1
Run Code Online (Sandbox Code Playgroud)
但它们都不等同于C#的关键字as
.
我想我需要为F#中的等价物做一个匹配表达式
match inputValue with
| :? Type1 as type1Value -> type1Value
| _ -> null
Run Code Online (Sandbox Code Playgroud)
它是否正确?
我一直在做一些性能测试,主要是因为我可以理解迭代器和简单for循环之间的区别.作为其中的一部分,我创建了一组简单的测试,然后对结果感到惊讶.对于某些方法,64位比32位快近10倍.
我正在寻找的是为什么会发生这种情况的一些解释.
[下面的答案说明这是由于32位应用程序中的64位算术.将long更改为int会在32位和64位系统上产生良好的性能.
以下是有问题的3种方法.
private static long ForSumArray(long[] array)
{
var result = 0L;
for (var i = 0L; i < array.LongLength; i++)
{
result += array[i];
}
return result;
}
private static long ForSumArray2(long[] array)
{
var length = array.LongLength;
var result = 0L;
for (var i = 0L; i < length; i++)
{
result += array[i];
}
return result;
}
private static long IterSumArray(long[] array)
{
var result = 0L;
foreach (var entry in array)
{
result += …
Run Code Online (Sandbox Code Playgroud) c# ×6
.net ×2
.net-4.5 ×1
algorithm ×1
c#-7.0 ×1
c#-to-f# ×1
console ×1
f# ×1
hgignore ×1
median ×1
mercurial ×1
optimization ×1
performance ×1
silverlight ×1