小编Mar*_*ark的帖子

c#中的抽象枚举

有没有办法在C#中创建一个(protected)enum abstract
基类示例:

protected abstract enum commands{}; //CS0106        
protected abstract void useCommands(commands meh);  
Run Code Online (Sandbox Code Playgroud)

这不会编译,因为" abstract对此项无效".
是否有一种工作方式来实现所期望的行为?

.net c# inheritance enums abstract

3
推荐指数
3
解决办法
9157
查看次数

DateTime.Now在类构造函数中

美好的一天.
我正在研究处理任务的事情.
每个任务由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被接受或替换为相同的结果?

c# datetime constructor constructor-overloading

2
推荐指数
1
解决办法
903
查看次数

在构造函数中使用'this'

我有一个我想要构建的类,通过从网络流反序列化它.

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 []并拥有一个合适的对象,而不是使用另一个类中的方法.
现在,我知道我显然不能这样做=.我已经阅读了这个问题,目前正在阅读其中提到的文章,但我不确定我是否正确理解它.

我的意图是否足够明确?

有没有办法做我想做的事情?

谢谢你们.

c# constructor

1
推荐指数
1
解决办法
137
查看次数

计算符合List集合中某些条件的对象

我想计算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看起来像它修复它.

.net c#

0
推荐指数
1
解决办法
4370
查看次数

null-coalescing运算符评估?

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以及为什么?

.net c# operators

0
推荐指数
1
解决办法
116
查看次数