有没有办法在C#中创建一个(protected)enum abstract?
基类示例:
protected abstract enum commands{}; //CS0106
protected abstract void useCommands(commands meh);
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为" abstract对此项无效".
是否有一种工作方式来实现所期望的行为?
美好的一天.
我正在研究处理任务的事情.
每个任务由3个字符串和一个DateTime对象组成
下面是我构建的构造函数.
public Task(string von, string was, string an, DateTime zeit = DateTime.Now)
Run Code Online (Sandbox Code Playgroud)
编译时我得到编译器错误
Default parameter value for 'zeit' must be a compile-time constant (CS1736)
我假设问题是,-obvioulsy- DateTime.Now的值取决于构造函数被调用的时间,这是我想要的全部内容.
我已经看过[this]线程,但它并不真正适用于我,因为DateTime对象的内存需求总是相同的,并且该线程说问题是该调用的未知堆需求.1
我已经有了一个解决方法的想法(见下文),但我们都知道解决方法不是最佳实践
public Task(string von, string was, string an, DateTime zeit){
if(zeit == null)
dateOfCreation = DateTime.Now; //dateOfCreation being the name of Task's internal DateTime field.
else
dateOfCretion = zeit;
Run Code Online (Sandbox Code Playgroud)
所以,如果我想使用当前的DateTime,我会传递null.但是:如果我花时间和精力始终专门传递null,我不妨每次都传递DateTime.Now.
问题:有没有办法让参数DateTime zeit = DateTime.Now被接受或替换为相同的结果?
我有一个我想要构建的类,通过从网络流反序列化它.
public Anfrage(byte[] dis)
{
XmlSerializer deser = new XmlSerializer(typeof(Anfrage));
Stream str = new MemoryStream();
str.Write(dis, 0, dis.Length);
this = (Anfrage)deser.Deserialize(str);
}
Run Code Online (Sandbox Code Playgroud)
目的是我只想传递byte []并拥有一个合适的对象,而不是使用另一个类中的方法.
现在,我知道我显然不能这样做=.我已经阅读了这个问题,目前正在阅读其中提到的文章,但我不确定我是否正确理解它.
我的意图是否足够明确?
有没有办法做我想做的事情?
谢谢你们.
我想计算List<T>符合特定条件的对象的出现次数.
例如,像
int List<T>.Count(Predicate<T> match)
这样,例如,如果有一个列表chores,我可以看到有多少是逾期.
int overdue = listOfChores.Count((element) => { return element.DueDate <= DateTime.Today; });
Run Code Online (Sandbox Code Playgroud)
我知道这不存在,到目前为止,我通过以下方式解决这样的问题:
int overdue = listOfChores.FindAll([...]).Count;
Run Code Online (Sandbox Code Playgroud)
但是,分配和初始化新的List等只是为了得到计数.
以较少的分配开销等方式实现此目的:
int good = 0;
foreach(chore element in listOfChores)
if(element.DueDate <= DateTime.Today)
good++;
Run Code Online (Sandbox Code Playgroud)
最后一种方法也可以是exandend来计算几个条件而不必多次遍历循环.(我已经发现获取 count属性只需要O(1),但是要使List计数仍然需要花费很多时间)
int a = 0;
int b = 0;
foreach(chore element in listOfChores)
if(element.CondA)
a++;
if(element.CondB)
b++;
Run Code Online (Sandbox Code Playgroud)
鉴于此,我甚至可以想象出类似的东西
int[] List<T>.Count(Predicate<T>[] matches)
我的问题:
有没有这样的事情,我还没有找到它?
如果不是:实现此类功能的方法是什么?
编辑:
添加LINQ看起来像它修复它.
object bread(food foo)
{
return foo.ingredient ?? "cheese";
}
Run Code Online (Sandbox Code Playgroud)
如果foo退出,但成分是null,我得到"cheese".我的问题,包括一个假设:
如果foo本身null将"chesse"被退回或将抛出ArgutmentNullException?
我的GUESS是NullCoalescingOperator的实现或多或少是这样的:
object nco(object lhs, object rhs)
{
if(lhs != null)
return lhs;
else
return rhs;
}
Run Code Online (Sandbox Code Playgroud)
因此,传递 foo.ingredient已经导致异常(因为您无法检查您没有的对象中的字段),因此它被抛出.
会有意义的.
这个想法是否正确/如何实施nco以及为什么?