为什么不允许在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赋值的运行时错误.我只是想知道为什么这两种类型的行为不同.
我不是NHibernate用户; 我写了一个序列化实用程序库.用户已记录一个功能请求,我应该处理NHibernate代理类,将它们视为与实际类型相同.目前,我的代码将它们视为意外继承,并抛出异常.
代码不会提前知道NHibernate(包括没有引用,但我不是反射;-p)
是否有一种强大/可靠的方法来检测此类代理类型?显然DataContractSerializer
处理这个很好,所以我希望它是非常简单的.也许是一些界面或[attribute]
装饰.
此外,在反序列化期间; 目前我将创建原始类型(不是NHibernate类型).这是否适用于持久性目的?或者是否需要代理类型?如果是后者; 创建代理类型的实例需要什么?
我正在重构我的库,以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)
有趣的是,它 …
我正在使用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)
如何正确添加命名空间声明?
想象一下根命名空间级别的类型(可能位于默认global
空间中,或者可能是extern alias
)。
使用别名前缀时,似乎无法通过 via 引用此类型。nameof()
它可以与typeof
, 以及通过using
别名配合使用(尽管nameof
在using
别名上生成别名,而不是类型名称)。编译器反对 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) 我正在使用VisualSVN Server来托管SVN仓库,对于一些自动化工作,我希望能够通过http [s]层获得特定版本.
我可以通过http [s]请求到服务器(httpd?)来获取HEAD版本 - 但是有没有能力指定修订版,可能是查询字符串?我似乎无法找到它......
除非我能帮忙,否则我不想做结帐,因为特定文件夹中有很多文件,我不想要它们 - 只有一两个.
要创建空序列,请使用以下内容
var empty = Enumerable.Empty<string> ();
Run Code Online (Sandbox Code Playgroud)
是否有像这样容易创建空字典?
我必须从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被调用之前没有任何东西,所以我猜服务器不会出现问题....
我需要知道如何阅读文本文件的最后一行.我需要找到该行,然后将其处理成一个SQL数据库...我一直在阅读并搜索网络,但我正在努力找到正确的方法来做到这一点.即:
我希望这是有道理的.
我有这个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# ×9
.net ×1
http ×1
interface ×1
linq ×1
linq-to-xml ×1
nameof ×1
nhibernate ×1
non-nullable ×1
performance ×1
stackalloc ×1
svn ×1
visualsvn ×1
xml ×1