给定像这样的数据源:
var c = new Car[]
{
new Car{ Color="Blue", Price=28000},
new Car{ Color="Red", Price=54000},
new Car{ Color="Pink", Price=9999},
// ..
};
Run Code Online (Sandbox Code Playgroud)
如何用LINQ 找到满足一定条件的第一辆车的索引?
编辑:
我可以想到这样的东西,但它看起来很糟糕:
int firstItem = someItems.Select((item, index) => new
{
ItemName = item.Color,
Position = index
}).Where(i => i.ItemName == "purple")
.First()
.Position;
Run Code Online (Sandbox Code Playgroud)
用一个普通的循环解决这个问题会是最好的吗?
自从我将项目升级到visual studio 2010项目格式后,我的C++/CLI项目就针对.net framework 4.0.
很容易将框架版本从C#项目切换到另一个版本,但我不知道如何在C++/CLI项目中执行此操作,我在项目属性页面中没有看到此设置.
有一种简单的方法可以执行以下操作:
String s = myObj == null ? "" : myObj.ToString();
Run Code Online (Sandbox Code Playgroud)
我知道我可以做到以下几点,但我真的认为它是一个黑客:
String s = "" + myObj;
Run Code Online (Sandbox Code Playgroud)
如果Convert.ToString()有一个适当的重载将是很好的.
我想用给定的类型对象调用我的泛型方法.
void Foo(Type t)
{
MyGenericMethod<t>();
}
Run Code Online (Sandbox Code Playgroud)
显然不起作用.
我怎样才能使它工作?
我使用office interop将DataTable导出到Excel文件.问题是,Excel不会识别日期,而是显示数字.在另一种情况下,我传递一个字符串,然后将其识别为日期.在这两种情况下,数据都搞砸了.
我尝试过NumberFormat @,它应该以文本格式存储单元格,但它也不起作用.
Application app = new Application();
app.Visible = false;
app.ScreenUpdating = false;
app.DisplayAlerts = false;
app.EnableAnimations = false;
app.EnableAutoComplete = false;
app.EnableSound = false;
app.EnableTipWizard = false;
app.ErrorCheckingOptions.BackgroundChecking = false;
Workbook wb = app.Workbooks.Add(XlWBATemplate.xlWBATWorksheet);
Worksheet ws = (Worksheet)wb.Worksheets[1];
for (int j = 0; j < dt.Rows.Count; j++)
{
for (int i = 0; i < dt.Columns.Count; i++)
{
Range rng = ws.Cells[j+2, i+1]as Range;
rng.Value2 = dt.Rows[j][i].ToString();
rng.NumberFormat = "@";
}
}
wb.SaveAs(filename, Missing.Value, Missing.Value, Missing.Value, Missing.Value, …Run Code Online (Sandbox Code Playgroud) $ str [n]和$ str {n}之间有什么区别,因为$ str是一个字符串.
我注意到两者似乎都是一样的,除了{}在我找到的任何文档中都没有出现.
为什么我不能初始化初始化程序中的只读变量?以下内容不起作用:
class Foo
{
public readonly int bar;
}
new Foo { bar=0; }; // does not work
Run Code Online (Sandbox Code Playgroud)
这是由于CLR的某些技术限制吗?
编辑
我知道它new Foo { bar=0; }是相同的new Foo().bar=0;,但是CLR强制执行"readonly",还是仅仅是编译器限制?
嗨,我有2个关于Linux目录权限的问题,我不明白.
我从名为Documents的文件夹中删除了执行标志.之后,我不能使用cd,但我仍然可以从父目录中执行"ls Documents",它仍然会列出Documents目录中的文件.我虽然缺少x-flag否认阅读这个目录?
然后我想知道为什么目录上的粘性位被发明了.我听说它被使用,以便用户无法删除其他用户创建的临时文件.但是这个IMO违反了删除文件的规则,我们只需要这个目录的权限.为什么不简单地给每个用户一个单独的/ tmp /目录而不是在规则系统中引入异常?我知道国旗的作用,但我想知道为何发明的原因.
我刚看了一页"什么是新的.NET Framework 4.0".我无法理解最后一段:
删除枚举目录或文件上的打开句柄
创建自定义方法(或Visual Basic中的函数)以包含您的枚举代码.
将带有NoInlining选项的MethodImplAttribute属性应用于新方法.例如:
[MethodImplAttribute(MethodImplOptions.NoInlining)]Private void Enumerate()包含以下方法调用,以在枚举代码后运行:
Run Code Online (Sandbox Code Playgroud)* The GC.Collect() method (no parameters). * The GC.WaitForPendingFinalizers() method.
为什么属性NoInlining?内联有什么危害吗?
为什么不手动调用垃圾收集器,为什么不首先使枚举器实现IDisposable?我怀疑他们使用FindFirstFile()/ FindNextFile()API调用进行实现,因此如果枚举完成,则必须在任何情况下调用FindClose().
编辑:
有没有人知道为什么在文章中建议使用NoInlining属性?
是否可以同时组合List初始化器和对象初始化器?给定以下类定义:
class MyList : List<int>
{
public string Text { get; set; }
}
// we can do this
var obj1 = new MyList() { Text="Hello" };
// we can also do that
var obj2 = new MyList() { 1, 2, 3 };
// but this one doesn't compile
//var obj3 = new MyList() { Text="Hello", 1, 2, 3 };
Run Code Online (Sandbox Code Playgroud)
这是设计还是仅仅是c#编译器的错误或缺失功能?