在我首先设计一些Entity Framework应用程序之前,我只看了几个网络广播.我真的没有阅读那么多文档,我觉得我现在正在为此而痛苦.
我一直List<T>
在我的课堂上使用,而且效果很好.
现在我已经阅读了一些文档,并说它应该一直在使用ICollection<T>
.我改为这个,它甚至没有导致模型上下文改变.这是因为兼并List<T>
和ICollection<T>
继承IEnumerable<T>
,这是EF实际需要的吗?
但是,如果是这种情况,为什么EF文档没有声明它需要IEnumerable<T>
而不是ICollection<T>
?
在任何情况下,我做了什么都有任何缺点,或者我应该改变它?
我有一个包含多列的DataTable.我想List<String>
从DataTable的第一列中获取一个.我怎样才能做到这一点?
另一个论坛上出现了一个问题,我知道如何修复它,但它揭示了我特有的编译器功能.该人收到错误"嵌入式语句不能是声明或标记语句",因为他们在没有括号的if语句后声明了变量.这不是他们的意图,但是他们在if语句之后立即注释掉了代码行,这使得变量声明成为执行的事实上的代码行.无论如何,这就是背景,这让我想到了这一点.
以下代码是非法的
if (true)
int i = 7;
Run Code Online (Sandbox Code Playgroud)
但是,如果你用括号括起来,那一切都是合法的.
if (true)
{
int i = 7;
}
Run Code Online (Sandbox Code Playgroud)
这两段代码都没用.然而第二个是好的.这种行为的具体解释是什么?
class Sample<T> : IDisposable // case A
{
public void Dispose()
{
throw new NotImplementedException();
}
}
class SampleB<T> where T : IDisposable // case B
{
}
class SampleC<T> : IDisposable, T : IDisposable // case C
{
public void Dispose()
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
案例C是案例A和案例B的组合.这可能吗?如何使案例C正确?
该Action<T>
委托返回void.是否有任何其他内置委托返回非空值?
无法将对象从DBNull强制转换为其他类型.
我有一个以下函数抛出上述错误.我正在处理存储过程和C#代码中的所有空值.
那么它在哪里得到这个错误?
我可以在catch块中看到错误.但我不明白以下create()中哪一行得到错误.
public Boolean Create(DataTO DataTO)
{
IDbTrans transaction = null;
IDbCmd IDbCmd;
string EncryptedPassword = Encrypt(DataTO.txtPwd);
Base dataAccCom = null;
try
{
dataAccCom = Factory.Create();
dataAccCom.OpenConnection();
transaction = dataAccCom.BeginTransaction();
IDbCmd = dataAccCom.CreateCommand("sp_Register", true);
dataAccCom.AddParameter(IDbCmd, "op_Id", DbType.Int64, 0, ParameterDirection.Output);
dataAccCom.AddParameter(IDbCmd, "p_dlstTitle", DbType.String, ReplaceNull(DataTO.dlstTitle));
dataAccCom.AddParameter(IDbCmd, "p_txtFirstName", DbType.String, ReplaceNull(DataTO.txtFirstName));
dataAccCom.AddParameter(IDbCmd, "p_txtMiddleName", DbType.String, ReplaceNull(DataTO.txtMiddleName));
dataAccCom.AddParameter(IDbCmd, "p_txtLastName", DbType.String, ReplaceNull(DataTO.txtLastName));
dataAccCom.AddParameter(IDbCmd, "p_txtDob", DbType.DateTime, DataTO.txtDob);
dataAccCom.AddParameter(IDbCmd, "p_txtDesig", DbType.String, ReplaceNull(DataTO.txtDesig));
dataAccCom.AddParameter(IDbCmd, "p_txtOFlatNo", DbType.String, ReplaceNull(DataTO.txtOFlatNo));
dataAccCom.AddParameter(IDbCmd, "p_txtOBuild", DbType.String, ReplaceNull(DataTO.txtOBuild));
dataAccCom.AddParameter(IDbCmd, "p_txtOPost", DbType.String, ReplaceNull(DataTO.txtOPost));
dataAccCom.AddParameter(IDbCmd, "p_txtOArea", DbType.String, …
Run Code Online (Sandbox Code Playgroud) 我有这样的功能:
DoSomething(List<IMyInterface>)
Run Code Online (Sandbox Code Playgroud)
IMyInterface是一个接口,MyClass是一个实现此接口的类MyClass:IMyInterface
我打电话DoSomething(List<MyClass>)
,它看起来不起作用.我怎样才能将类的列表作为函数的参数传递给类的接口列表?谢谢!
如果你有两个阵列string[] a
,int[] b
你如何能够Dictionary<string,int>
最有效地获得最佳代码?假设它们包含相同数量的元素.
例如,这是最好的方法吗?
Dictionary<string,int> vals = new Dictionary<string,int>();
for(int i = 0; i < size; i++)
{
vals.Add(a[i],b[i]);
}
Run Code Online (Sandbox Code Playgroud) 我不明白这里发生了什么:
这两行都编译:
Func<object> func = () => new object();
Expression<Func<object>> expression = ()=>new object();
Run Code Online (Sandbox Code Playgroud)
但这不是:
expression = func;
Run Code Online (Sandbox Code Playgroud)
没有隐式运算符LambdaExpression
或Expression<TDelegate>
将委托转换为表达式,因此必须发生其他事情才能使赋值工作.它是什么?
c# ×10
.net ×3
list ×3
asp.net ×1
class ×1
constraints ×1
datatable ×1
delegates ×1
expression ×1
generics ×1
icollection ×1
ienumerable ×1
if-statement ×1
inheritance ×1
interface ×1
lambda ×1
linq ×1
parameters ×1
winforms ×1