如果您曾经使用过Reflector,您可能会注意到C#编译器会生成类型,方法,字段和局部变量,这些变量值得调试器"特殊"显示.例如,以"CS $"开头的局部变量不会显示给用户.匿名方法的闭包类型,自动属性的后备字段等还有其他特殊的命名约定.
我的问题:在哪里可以了解这些命名约定?有谁知道一些文件?
我的目标是使PostSharp 2.0使用相同的约定.
这是我想写的结构:
public struct AttackTraits
{
public AttackTraits(double probability, int damage, float distance)
{
Probability = probability;
Distance = distance;
Damage = damage;
}
private double probability;
public double Probability
{
get
{
return probability;
}
set
{
if (value > 1 || value < 0)
{
throw new ArgumentOutOfRangeException("Probability values must be in the range [0, 1]");
}
probability = value;
}
}
public int Damage { get; set; }
public float Distance { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这会导致以下编译错误:
在分配所有字段之前,不能使用"this"对象 …
使用Json.NET检索C#中甚至可能不存在的JSON值的最佳实践是什么?
现在我正在处理一个JSON提供程序,它返回有时包含某些键/值对的JSON,有时则不然.我一直在使用(也许是错误的)这个方法来获取我的值(例如获得一个double):
if(null != jToken["width"])
width = double.Parse(jToken["width"].ToString());
else
width = 100;
Run Code Online (Sandbox Code Playgroud)
现在它工作正常,但是当它们很多时它很麻烦.我最后编写了一个扩展方法,并且只有在写完之后我才会想知道是否我是愚蠢的......反正这里是扩展方法(我只包括双和字符串的情况,但实际上我有很多更多):
public static T GetValue<T>(this JToken jToken, string key,
T defaultValue = default(T))
{
T returnValue = defaultValue;
if (jToken[key] != null)
{
object data = null;
string sData = jToken[key].ToString();
Type type = typeof(T);
if (type is double)
data = double.Parse(sData);
else if (type is string)
data = sData;
if (null == data && type.IsValueType)
throw new ArgumentException("Cannot parse type \"" …Run Code Online (Sandbox Code Playgroud) 不是varC#中的关键字?但为什么我这样做:
public class var { }
public class main
{
public static void main(string[] args)
{
var testVar = new var();
}
}
Run Code Online (Sandbox Code Playgroud)
该var是在代码中使用的是var这是在之前声明的类main类.编译器甚至没有抱怨.
当我这样做时:
public class int { }
Run Code Online (Sandbox Code Playgroud)
或这个:
public class true { }
Run Code Online (Sandbox Code Playgroud)
编译器说int或者true是关键字,不能像那样使用.为什么不一样var?
这是一个语法问题.我有一个泛型类,它继承自泛型基类,并将约束应用于其中一个类型参数.我还希望派生类实现一个接口.对于我的生活,我似乎无法弄清楚正确的语法.
这就是我所拥有的:
DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar { ... }
Run Code Online (Sandbox Code Playgroud)
首先想到的是:
DerivedFoo<T1,T2> : ParentFoo<T1, T2> where T2 : IBar, IFoo { ... }
Run Code Online (Sandbox Code Playgroud)
但这是不正确的,因为这导致T2需要实现IBar和IFoo,而不是DerivedFoo来实现IFoo.
我尝试了一些谷歌搜索,使用冒号,分号等,但我已经调整了.我确定答案很简单.
我正在尝试确定如何访问我的JObject中的数据,而我无法确定如何使用它.
JObject Object = (JObject)Response.Data["my_key"];
Run Code Online (Sandbox Code Playgroud)
我可以将它打印到控制台上做Console.WriteLine(对象),我看到数据,它看起来像:
{
"my_data" : "more of my string data"
...
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何通过迭代/枚举,任何人有任何想法?我现在正处于亏损状态.
TL; DR:我是这种语言的新手,不知道我在做什么
到目前为止,这是我的班级:
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Web;
using System.Net;
using System.IO;
public class MyClass
{
private const string URL = "https://sub.domain.com/objects.json?api_key=123";
private const string data = @"{""object"":{""name"":""Title""}}";
public static void CreateObject()
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = data.Length;
StreamWriter requestWriter = new StreamWriter(request.GetRequestStream(), System.Text.Encoding.ASCII);
requestWriter.Write(data);
requestWriter.Close();
try
{
// get the response
WebResponse webResponse = request.GetResponse();
Stream webStream = webResponse.GetResponseStream();
StreamReader responseReader = new StreamReader(webStream);
string response = responseReader.ReadToEnd(); …Run Code Online (Sandbox Code Playgroud) 安装Visual Studio 2017 Professional后,我无法再在Visual Studio 2015 Professional中构建我的ASP.NET Core.我从未在VS2017中打开过这个项目
我明白了
尝试运行项目模型服务器进程(1.0.0-preview3-004056)时发生以下错误.
无法启动该过程.找不到匹配命令dotnet-projectmodel-server的可执行文件
然后我在Visual Studio 2015中创建了一个全新的ASP.NET Core项目,并在加载项目时得到完全相同的消息.
另外,当我想要构建项目时,我得到了
MSB1009:项目文件不存在.
ASP.NET 5项目不会出现同样的问题,因此它仅限于ASP.NET Core
Visual Studio 2017年3月7日更新
如果在下面的答案中添加了一个global.json,则会获得global.json该C:\Program Files\dotnet\sdk\文件夹中存在的任何.net框架版本的错误消息
错误MSB4019找不到导入的项目"C:\ Program Files\dotnet\sdk\XXX\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Props".确认声明中的路径是否正确,以及该文件是否存在于磁盘上.
此外,当关闭Visual Studio并再次重新打开它时,我收到原始错误消息
我将把我的问题总结为以下代码片段.
List<int> list = new List<int>() { 5, 56, 2, 4, 63, 2 };
Console.WriteLine(list.First());
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常.
现在我尝试了以下内容
dynamic dList = list;
Console.WriteLine(dList.First());
Run Code Online (Sandbox Code Playgroud)
但是我得到了RuntimeBinderException.为什么会这样?
有没有像python的交互式REPL模式,但对于Java?因此,我可以,例如,键入InetAddress.getAllByName( localHostName )一个窗口,并立即获得结果,没有所有这些公共静态void nightmare()的事情?
c# ×8
json.net ×2
.net-4.0 ×1
.net-core ×1
api ×1
asp.net-core ×1
c#-4.0 ×1
constraints ×1
constructor ×1
debugging ×1
dynamic ×1
generics ×1
inheritance ×1
interface ×1
java ×1
json ×1
post ×1
rest ×1
struct ×1