条件表达式的类型无法确定?

我刚刚遇到这个(编写代码来演示“问题”): public ICollection CreateCollection(int x) { ICollection collection = x == 0 ? new List() : new LinkedList(); return collection; } 编译器抱怨: Fehler CS0173:Der Typ des bedingten Ausdrucks kann nicht bestimmt werden,weil keine implizite Konvertierung zwischen“System.Collections.Generic.List”und“System.Collections.Generic.LinkedList”erfolgt。 其翻译大致为: 无法确定条件运算符的类型,因为List和LinkedList之间没有隐式转换。 我可以看到为什么编译器会抱怨,但是,嘿,来吧。 它试图发挥愚蠢。 我可以看到两个表达式不是同一类型,但有一个共同的祖先,作为奖励,左侧的类型也是共同的祖先。 我相信编译器也可以看到它。 如果左侧被声明为var我可以理解错误。 我在这里想念的是什么? 编辑: 我接受詹姆斯·冈特的解释。 也许只是为了说清楚。 我可以很好地阅读编译器规范。 我想了解原因。 为什么有人决定以这种方式编写规范。 这种设计背后一定有原因。 根据詹姆斯的说法,设计原则是“没有惊喜”。 此外,CodeInChaos还解释了如果编译器试图从常见的祖先中推断出类型,您可能遇到的惊喜。

从套接字接收数据的C#性能方法?

假设我们有一个简单的互联网套接字,它将发送10兆字节(因为我想忽略内存问题)的随机数据。 是否应该使用任何性能差异或最佳实践方法来接收数据? 最终输出数据应由byte []表示。 是的,我知道向内存写入任意数量的数据是不好的,如果我正在下载一个大文件,我不会这样做。 但是出于论证的缘故,让我们忽略它,并假设它是一个少量的数据。 我也意识到这里的瓶颈可能不是内存管理而是套接字接收。 我只是想知道什么是最有效的接收数据的方法。 一些狡猾的方式可以想到的是: 有一个List和一个缓冲区,在缓冲区满了之后,将它添加到列表和结尾list.ToArray()以获取byte [] 将缓冲区写入内存流后,在完成构造stream.Length的byte []之后,将其全部读入其中以获取byte []输出。 有没有更有效/更好的方法来做到这一点?

为什么我们无法在ASMX Web服务中返回List ?

由于开发人员知道我们无法使用Web服务返回List ,因此我们只能将列表转换为.ToArray(); 我搜索了一些,但无法得到有效的答案为什么我们不能用网络服务重新列出List。 为什么我们必须将它们转换为ToArray(); ?

反序列化部分JSON

我有一个问题,将Json字符串反序列化为对象。 这是我从网络服务收到的一个示例json: { “GetDataResult”: “{ \”id\”:1234, \”cityname\”:\”New York\”, \”temperature\”:300, }” } 我有一个类似CityData的类 [JsonObject(“GetDataResult”)] public class CityData { [JsonProperty(“id”)] public int Id { get; set; } [JsonProperty(“cityname”)] public string CityName { get; set; } [JsonProperty(“temperature”)] public int Temperature { get; set; } } 我尝试通过调用DeserializeObject方法反序列化json var cityData = JsonConvert.DeserializeObject(response); 但根元素似乎有问题…… 你们知道我怎么解决它,所以我收到一个填充了数据的CityData对象?

如何使用.NET API在Google云端硬盘中创建文件夹?

我正在使用C#,Google .NET API。 如何在Google云端硬盘根位置创建文件夹? 任何代码都会有所帮助。 谢谢

从静态方法调用非静态方法c#

可能重复: 从静态方法c#调用非静态方法 我们可以从静态方法创建实例中调用非静态方法。 码: public class Foo { public void Data1() { } public static void Data2() { Foo foo = new Foo(); foo.Data1(); } } 但是,我听说可以在委托的帮助下从静态方法调用非静态方法。 这是真的吗? 如果是,那怎么样? 请指导我提供示例代码。 谢谢。

Web API OData:您如何在单个实体上进行扩展?

我已经多次阅读这 两篇文章 ,试图找出在单个实体上使用$expand查询选项的方法,但是在我尝试过的每一种方式中,我似乎都无法做到这行得通。 所有其他查询选项都有效, $expand目前也适用于收集结果。 模型 :玩家实体具有名为Stats的导航属性,其中每个对象包含给定年份的该玩家的统计数据。 我用这种方式设置了OData: config.EnableQuerySupport(); ODataModelBuilder modelBuilder = new ODataConventionModelBuilder(); modelBuilder.EntitySet(“OPlayer”); modelBuilder.EntitySet(“OPlayerStats”); Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel(); config.Routes.MapODataRoute(“ODataRoute”, “odata”, model); 最初,我以这种方式设置了我的控制器: public class OPlayerController : EntitySetController { private readonly DatabaseContext _db = new DatabaseContext(); protected override Player GetEntityByKey(int key) { return _db.Players.FirstOrDefault(p => p.PlayerId == key); } public override IQueryable Get() { […]

为什么SonarQube会重新打开标记为“无法修复”的问题?

在我们的组织中,我们使用SonarQube 5.6和C#插件5.3.1,我们标记为Will Not Fix的每个问题都会在下次分析运行时重新打开。 有时,当分析再次运行时,问题会被标记为“无法修复”(如之前手动标记)。 我们被困在一个圆圈里。 有任何想法吗?

限制C#应用程序中托管堆的大小

我可以配置我的C#应用​​程序将其内存消耗限制为200MB吗? IOW,我不想等待自动GC(这似乎允许堆增长远远超过此应用程序实际需要的)。 我知道在Java中有一个命令行开关,你可以传递给实现这个的JVM .. C#中是否有相同的东西? PS 我知道我可以从代码中调用GC,但这是我不想定期做的事情。 我宁愿在启动时以某种方式设置它并忘记它。

.NET XmlDocument LoadXML和实体

将XML加载到XmlDocument中时,即 XmlDocument document = new XmlDocument(); document.LoadXml(XMLDATA); 有没有办法阻止这个过程取代实体? 我有一个奇怪的问题,我在xml中有一个TM符号(存储为实体#8482)被转换为TM字符。 就我而言,这不应该发生,因为XML文档具有编码ISO-8859-1(没有TM符号) 谢谢