我有两个接口:
interface IStudent
{
string Name { get; }
string EducationLevel { get; }
}
interface ITeacher
{
string Name { get; }
string Department { get; }
}
Run Code Online (Sandbox Code Playgroud)
你会如何在C#中设计它,以便一个对象可以
任何想法 ?
我可以做两个直接实现两个接口的类.但对于一个既是老师又是学生的人,我将有两个不同的对象:我只想要一个!
给定Msdn:一个constant-expression是一个可以在编译时完全评估的表达式.
但是在下面的示例代码中,我有一个无法在编译时评估的contantExpression.
我应该错过什么,但是什么?
public class SomeClass
{
public string Key { get; set; }
}
public static void Sample()
{
var wantedKey = Console.ReadLine();
Expression<Func<SomeClass, bool>> expression = c => c.Key == wantedKey;
var maybeAConstantExpression = ((MemberExpression)((BinaryExpression)expression.Body).Right).Expression;
//Both are true, so we have a constantExpression,righ and Value should be known
Console.WriteLine(maybeAConstantExpression.NodeType == ExpressionType.Constant);
Console.WriteLine(maybeAConstantExpression.GetType() == typeof(ConstantExpression));
var constantExpression = ((ConstantExpression)maybeAConstantExpression);
var constantValue = constantExpression.Value;
//ConsoleApplication1.Program+<>c__DisplayClass0
//Do not looks like a constant..this is a class...
Console.WriteLine(constantValue);
var fakeConstantValue = constantValue.GetType().GetField("wantedKey").GetValue(constantValue);
//Return …Run Code Online (Sandbox Code Playgroud) 有没有办法用linq积累一些东西.
初始代码:
Something oneItem;
List<Something> allItems;
while ((oneLine = _generator.GenerateSomething()) != null)
allItems.Add(_generator.CurrentItem);
Run Code Online (Sandbox Code Playgroud)
我想要像:
var allItems = Enumerable.Take( ()=>_generator.GenerateSomething()).While(item=>item !=null).ToList();
Run Code Online (Sandbox Code Playgroud)
实际上,如果生成器实现IEnumerable会非常好,我会这样使用它:
var allItems = _generator.TakeWhile(item !=null);
Run Code Online (Sandbox Code Playgroud)
最后一个很容易理解,我想解决它(我可以使用一种生成机器状态的包装器,给出一个生产方法(_generator.GenerateSomething())和一个停止条件(item == null).但我不能写这个额外的类或某些原因).
我正在寻找一种方法来为任何对象提供通用的本地缓存.这是代码:
private static readonly Dictionary<Type,Dictionary<string,object>> _cache
= new Dictionary<Type, Dictionary<string, object>>();
//The generic parameter allow null values to be cached
private static void AddToCache<T>(string key, T value)
{
if(!_cache.ContainsKey(typeof(T)))
_cache.Add(typeof(T),new Dictionary<string, object>());
_cache[typeof (T)][key] = value;
}
private static T GetFromCache<T>(string key)
{
return (T)_cache[typeof (T)][key];
}
Run Code Online (Sandbox Code Playgroud)
1-有没有办法不使用getfromcache方法?
2-有没有办法确保第二个字典中的类型安全,说所有对象都具有相同的类型.(这是由addToCache方法提供的,但我更喜欢设计中的类型控件).例如,要具有以下类型的_cache
Dictionary<Type,Dictionary<string,typeof(type)>>
Run Code Online (Sandbox Code Playgroud)
谢谢
我有一个业务对象绑定到一个窗体(每个属性绑定到一个控件).有一些业务规范(例如此字段不应为空,此字段必须大于等等...).检查所有规则的最佳方法是什么?
我目前在每个控件上都有一个验证器,所以我可以检查所有验证器是否正常,但我真的不喜欢这个解决方案.事实上,这些规则已被分发,并且不容易立即看到所有规则.
我可以有一个检查所有规则的大方法CheckValidaty,但这会导致与验证器的双重检查.
你会做什么,其他解决方案?
为什么下面的行编译?对我来说,Nullable<double>是一个结构,我们不能为这种类型的变量赋值"null".
Nullable<double> someVar = null;
Run Code Online (Sandbox Code Playgroud)
赋值运算符不应该是可覆盖的,但可能是一些语法糖,编译器知道它必须将其更改为?
Nullable<double> someVar = new Nullable<double>();
someVar.Value = null;
Run Code Online (Sandbox Code Playgroud) 如何在类型为object的对象上调用.ToString()方法,该对象可以为null.我目前正在做以下事情,但它很长:
myobject == null ? null : myobject.ToString()
Run Code Online (Sandbox Code Playgroud)