考虑代码片段.
IList<String> obj=new List<string>();
IEnumerable<Object> obj1 = obj;
Run Code Online (Sandbox Code Playgroud)
但如果我写ICollection<Object> obj2 = obj;它会抛出编译时错误.
无法隐式将类型'
System.Collections.Generic.IList<string>' 转换为'System.Collections.Generic.ICollection<object>'.
为什么,因为这种行为List<T>同时实现了IEnumerable<T>和ICollection<T>,也IList<T>被定义为
public interface IList<T> : ICollection<T>, IEnumerable<T>, IEnumerable
{
T this[int index] { get; set; }
int IndexOf(T item);
void Insert(int index, T item);
void RemoveAt(int index);
}
Run Code Online (Sandbox Code Playgroud) 考虑一下代码
public class Base
{
public virtual int Add(int a,int b)
{
return a+b;
}
}
public class Derived:Base
{
public override int Add(int a,int b)
{
return a+b;
}
public int Add(float a,float b)
{
return (Int32)(a + b);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我创建Derived类的实例并使用int类型的参数调用Add,为什么它使用float参数调用Add方法
Derived obj =new Derived()
obj.Add(3,5)
// why this is calling
Add(float a,float b)
Run Code Online (Sandbox Code Playgroud)
为什么不调用更具体的方法?
如何在列表和数组中定义索引器.
List<MyStruct> lists=new List<MyStruct>();MyStruct结构在哪里.现在考虑一下
MyStruct[] arr=new MyStruct[10];
arr[0]给出了第一个Structure项的引用.但是lists[0]给了我一份它的副本.是否有任何理由这样做.此外,由于Int32结构是List<Int32> list1 =new List<Int32>();如何可以访问list1[0]或分配list1[0]=5在不可能的地方lists[0]._x=5
就在我编写自己的函数之前,只想检查是否存在类似 string.split(string input, params int[] indexes) .NET库的函数?此函数应该将字符串拆分为传递给它的索引.
编辑:我不应该添加string.join句子 - 这是令人困惑的.
请考虑以下代码段
namespace ConsoleApplication1
{
public delegate TResult Function<in T, out TResult>(T args);
class Program
{
static void Main(string[] args)
{
Program pg =new Program();
Function<Object, DerivedClass> fn1 = null;
Function<String, BaseClass> fn2 = null;
fn1 = new Function<object, DerivedClass>(pg.myCheckFuntion)
fn2=fn1;
fn2("");// calls myCheckFuntion(Object a)
pg.myCheckFuntion("Hello"); //calls myCheckFuntion(String a)
}
public DerivedClass myCheckFuntion(Object a)
{
return new DerivedClass();
}
public DerivedClass myCheckFuntion(String a)
{
return new DerivedClass();
}
}
Run Code Online (Sandbox Code Playgroud)
为什么委托调用和普通方法调用调用不同的方法.
为什么Linq表达式IL会导致省略Select投影,而相应的方法表达式会保留Select投影?
我想这两段代码也是一样的.
var a = from c in companies
where c.Length >10
select c;
//
var b = companies.Where(c => c.Length > 10).Select(c => c);
//IL - LINQ
IEnumerable<string> a = this.companies.
Where<string>(CS$<>9__CachedAnonymousMethodDelegate1);
//IL
IEnumerable<string> b = this.companies.Where<string>
(CS$<>9__CachedAnonymousMethodDelegate4).Select<string, string>
(CS$<>9__CachedAnonymousMethodDelegate5);
Run Code Online (Sandbox Code Playgroud)
那为什么IL的区别呢?
编辑:那么为什么
var a = from c in companies
select c;
Run Code Online (Sandbox Code Playgroud)
即使在IL内部也会导致SELECT投影.它也可以省略吗?
考虑这段代码.
var values = new List<int> {123, 432, 768};
var funcs = new List<Func<int>>();
values.ForEach(v=>funcs.Add(()=>v));
funcs.ForEach(f=>Console.WriteLine(f()));//prints 123,432,768
funcs.Clear();
foreach (var v1 in values)
{
funcs.Add(()=>v1);
}
foreach (var func in funcs)
{
Console.WriteLine(func()); //prints 768,768,768
}
Run Code Online (Sandbox Code Playgroud)
我知道由于lambda捕获的闭包变量,第二个foreach打印768次3次.为什么在第一种情况下不会发生?foreach关键字如何与方法不同Foreach?当我这样做时,表达式是否被评估?values.ForEach
我有以下表格结构.
我只想将SubId更新为其为null的所有行,其中RawLineNumber以1 递增,SeqNumber以1递增.
RawlineNumber Claimid SubId SeqNumber
1 6000 A100 1
2 6000 NULL 2
3 6000 NULL 3
10 6000 A200 1
11 6000 NULL 2
25 6000 A300 1
26 6000 NULL 2
27 6000 NULL 3
Run Code Online (Sandbox Code Playgroud)
我想更新
SUBID的RawLineNumber与A100 2和3,
SUBID的RawLineNumber 11与A200,
SUBID的RawLineNumber 26和27架A300.
我有一个光标可以完成这项工作但是我可以用CTE来处理它吗?
t-sql sql-server-2005 cursor common-table-expression cross-apply
我有两个不同类型的列表,它们具有以下常见属性.
Id - >用于识别相应的对象
Bunch of other Properties
ModificationDate
需要根据修改日期比较这两个列表.如果修改日期不同(第一个列表ModificationDate大于第二个列表的ModificationDate那个,则将所有属性复制,如果该项目从第一个列表到第二个列表.
请让我知道最好的方法.
编辑:第二个列表可能包含或不包含第一个列表的所有元素,反之亦然.我的第一个列表始终是源列表.因此,如果一个项目存在于列表1中而不存在于列表2中,我们需要将其添加到列表2中.如果列表2中存在但是不在列表1中的项目则将其从列表2中删除.
如果我们反编译GAC中存在的.net框架dll(例如.System.Linq.Expressions.dll),在IL中进行了一些更改并将其组装回去,我们是否需要重新签名?
SELECT Col1
FROM Table
WHERE Col2 = 63895746
ORDER BY Col
FOR XML PATH,TYPE
Run Code Online (Sandbox Code Playgroud)
我在结果中不需要NULLS.我希望结果被<Cols> </ Cols>包裹,即使col1为null也不是
在这个例子中,Table不包含col2 = 63895746的任何行,所以我将获得一个空结果集,因此type指令将使其为NULL并返回它
c# ×9
c#-4.0 ×2
covariance ×2
.net ×1
closures ×1
cross-apply ×1
cursor ×1
delegates ×1
foreach ×1
gac ×1
generics ×1
ienumerable ×1
linq ×1
methods ×1
overloading ×1
split ×1
sql ×1
sql-server ×1
string ×1
t-sql ×1
value-type ×1
virtual ×1