小编Mar*_*ell的帖子

为什么C#中的DateTime不允许为null?

为什么不允许在C#中为null分配null?这是如何实现的?是否可以使用此功能使您自己的类不可为空?

例:

string stringTest = null; // Okay
DateTime dateTimeTest = null; // Compile error
Run Code Online (Sandbox Code Playgroud)

我知道我可以DateTime?在C#2.0中使用以允许将null分配给dateTimeTest,并且我可以在我的字符串上使用Jon Skeet的NonNullable类来获取stringTest赋值的运行时错误.我只是想知道为什么这两种类型的行为不同.

c# non-nullable

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

识别NHibernate代理类

我不是NHibernate用户; 我写了一个序列化实用程序库.用户已记录一个功能请求,我应该处理NHibernate代理类,将它们视为与实际类型相同.目前,我的代码将它们视为意外继承,并抛出异常.

代码不会提前知道NHibernate(包括没有引用,但我不是反射;-p)

是否有一种强大/可靠的方法来检测此类代理类型?显然DataContractSerializer处理这个很好,所以我希望它是非常简单的.也许是一些界面或[attribute]装饰.

此外,在反序列化期间; 目前我将创建原始类型(不是NHibernate类型).这是否适用于持久性目的?或者是否需要代理类型?如果是后者; 创建代理类型的实例需要什么?

.net c# nhibernate

37
推荐指数
3
解决办法
2万
查看次数

这种不安全的代码是否也可以在.NET Core 3中使用?

我正在重构我的库,以Span<T>尽可能避免堆分配,但是由于我也针对较旧的框架,因此我也在实现一些通用的后备解决方案。但是现在我发现了一个奇怪的问题,我不确定是在.NET Core 3中发现了错误还是在做违法的事情。

问题:

// This returns 1 as expected but cannot be used in older frameworks:
private static uint ReinterpretNew()
{
    Span<byte> bytes = stackalloc byte[4];
    bytes[0] = 1; // FillBytes(bytes);

    // returning bytes as uint:
    return Unsafe.As<byte, uint>(ref bytes.GetPinnableReference());
}

// This returns garbage in .NET Core 3.0 with release build:
private static unsafe uint ReinterpretOld()
{
    byte* bytes = stackalloc byte[4];
    bytes[0] = 1; // FillBytes(bytes);

    // returning bytes as uint:
    return *(uint*)bytes;
}
Run Code Online (Sandbox Code Playgroud)

有趣的是,它 …

c# stackalloc

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

如何将多个命名空间声明添加到XDocument?

我正在使用XDocument在已知结构中构建Xml文档.我想要构建的结构如下:

<request xmlns:ns4="http://www.example.com/a" xmlns:ns3="http://www.example.com/b" xmlns:ns2="http://www.example.com/c" >
    <requestId>d78d4056-a831-4c7d-a357-d14402f623fc</requestId>
    ....
</request>
Run Code Online (Sandbox Code Playgroud)

请注意"xmlns:nsX"属性.

我正在尝试将这些属性添加到我的"request"元素中,但没有成功.

XNamespace ns4 = XNamespace.Get("http://www.example.com/a");
XNamespace ns3 = XNamespace.Get("http://www.example.com/b");
XNamespace ns2 = XNamespace.Get("http://www.example.com/c");

XDocument doc = new XDocument(
    new XDeclaration("1.0", "utf-8", "no"),
    new XElement("request",
        new XAttribute("ns4", ns4),
        new XAttribute("ns3", ns3),
        new XAttribute("ns2", ns2),
        new XElement("requestId", Guid.NewGuid())
     )
);
Run Code Online (Sandbox Code Playgroud)

但是,这会产生以下结果:

<request ns4="http://www.example.com/a" ns3="http://www.example.com/b" ns2="http://www.example.com/c">
  <requestId>38b07cfb-5e41-4d9a-97c8-4740c0432f11</requestId>
</request>
Run Code Online (Sandbox Code Playgroud)

如何正确添加命名空间声明?

c# xml linq-to-xml

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

为什么 nameof 不能在根级别与别名限定类型一起使用?

想象一下根命名空间级别的类型(可能位于默认global空间中,或者可能是extern alias)。

使用别名前缀时,似乎无法通过 via 引用此类型。nameof()它可以与typeof, 以及通过using别名配合使用(尽管nameofusing别名上生成别名,而不是类型名称)。编译器反对 CS8083,“别名限定名称不是表达式”。

但是:这有理由吗?这是为了防止一些模糊的问题场景吗?或满足一些规范细节?或者这可能是一个编译器错误?我还非常满意地注意到,我们通常不应该在命名空间根中声明类型——CA1050这一点非常正确;但这不是重点:)

完整示例如下;请注意,在此示例中使用两个项目进行using别名检查,但为了简单起见,C在简单调查中可以忽略所有涉及的内容。

extern alias foo;
using System;
using X = global::A;
using Y = global::FunWithNamespaces.B;
using Z = foo::C;

public class A { }

namespace FunWithNamespaces
{
    public class B { }
    public class Program
    {
        static void Main()
        {
            // oddness is on the lines marked ## CS8083 …
Run Code Online (Sandbox Code Playgroud)

c# nameof

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

使用VisualSVN Server通过http获取特定修订版

我正在使用VisualSVN Server来托管SVN仓库,对于一些自动化工作,我希望能够通过http [s]层获得特定版本.

我可以通过http [s]请求到服务器(httpd?)来获取HEAD版本 - 但是有没有能力指定修订版,可能是查询字符串?我似乎无法找到它......

除非我能帮忙,否则我不想做结帐,因为特定文件夹中有很多文件,我不想要它们 - 只有一两个.

svn version-control visualsvn http visualsvn-server

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

使用Linq对象,如何轻松地创建<string,string>的空字典?

要创建空序列,请使用以下内容

var empty = Enumerable.Empty<string> ();
Run Code Online (Sandbox Code Playgroud)

是否有像这样容易创建空字典?

c# linq

31
推荐指数
5
解决办法
1万
查看次数

如何加速DbSet.Add()?

我必须从CSV文件导入大约30k行到我的SQL数据库,这可能需要20分钟.

使用分析器进行故障排除向我显示DbSet.Add占用的时间最多,但为什么呢?

我有这些Entity Framework Code-First类:

public class Article
{
    // About 20 properties, each property doesn't store excessive amounts of data
}

public class Database : DbContext
{
    public DbSet<Article> Articles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

对于我的for循环中的每个项目,我做:

db.Articles.Add(article);
Run Code Online (Sandbox Code Playgroud)

在for循环之外我做:

db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

它与我的本地SQLExpress服务器连接,但我想在SaveChanges被调用之前没有任何东西,所以我猜服务器不会出现问题....

c# performance entity-framework sql-server-2008

30
推荐指数
4
解决办法
9550
查看次数

阅读文本文件的最后一行

我需要知道如何阅读文本文件的最后一行.我需要找到该行,然后将其处理成一个SQL数据库...我一直在阅读并搜索网络,但我正在努力找到正确的方法来做到这一点.即:

  1. 查找文件的最后一行.
  2. 处理最后一行文件.

我希望这是有道理的.

c#

29
推荐指数
5
解决办法
8万
查看次数

C#中的抽象显式接口实现

我有这个C#代码:

abstract class MyList : IEnumerable<T>
{
    public abstract IEnumerator<T> GetEnumerator();

    //abstract IEnumerator IEnumerable.GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)

就是这样,我得到:

'Type'没有实现接口成员'System.Collections.IEnumerable.GetEnumerator()'.

删除评论,我得到:

修饰符'abstract'对此项无效

如何制作显式实现摘要

c# abstract-class interface

28
推荐指数
2
解决办法
7121
查看次数