请考虑以下代码:
public sealed class Order
{
public Order()
{
Items = new List<OrderItem>();
}
public List<OrderItem> Items { get; private set; }
}
public sealed class OrderItem
{
}
Run Code Online (Sandbox Code Playgroud)
这里是Order另一个类的初始化.
var order = new Order
{
Items =
{
new OrderItem(),
new OrderItem()
}
};
Run Code Online (Sandbox Code Playgroud)
你能解释一下它的工作原理吗?当你看到Orderhas private set属性时,我认为不可能设置它的值.
我通过websocket接收JSON.至少:我是部分的.使用在线websocket服务,我收到完整的JSON响应(忽略所有HTML标记).当我查看我在控制台中收到的JSON时,我可以看到HTML标记(在调试期间使用HTML查看器查看它删除了HTML)但它突然结束(不完整的数据).
我的缓冲区有足够的空间,我正在使用async-await(假设)在继续之前等待整个响应进来.
private async Task Receive()
{
var buffer = new byte[4096 * 20];
while (_socket.State == WebSocketState.Open)
{
var response = await _socket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
if (response.MessageType == WebSocketMessageType.Close)
{
await
_socket.CloseAsync(WebSocketCloseStatus.NormalClosure, "Close response received",
CancellationToken.None);
}
else
{
var result = Encoding.UTF8.GetString(buffer);
var a = buffer[1000];
var b = buffer[10000];
var c = buffer[50000];
var d = buffer[81000];
Console.WriteLine(result);
var responseObject = JsonConvert.DeserializeObject<Response>(result, _requestParameters.ResponseDataType);
OnSocketReceive.Invoke(this, new SocketEventArgs {Response = responseObject });
buffer = new byte[4096 * 20];
} …Run Code Online (Sandbox Code Playgroud) 我有这个函数返回一个引用类型.现在,这个函数有两个可选参数,这两个参数都是DateTime类的实例.功能是这样的:
public DateTime GetDate(DateTime start = DateTime.MinValue, DateTime end = DateTime.MinValue)
{
// Method body...
}
Run Code Online (Sandbox Code Playgroud)
VS的错误是:
'start'的默认参数值必须是编译时常量
当然,错误适用于第二个参数,我完全理解发生了什么.
我真正想要的是知道是否有办法解决这个问题,即在方法中有可选参数.现在,我所做的是创造一个过载; 我的意思是,我创建了一个无参数函数GetDate()和一个双参数重载.
这不是一个真正的问题,但我只是想知道是否有办法做到这一点.
我有一部分代码像这样:
public static void main(String[] args) throws Exception {
String trueValue = Boolean.TRUE.toString();
String fieldValue = null;
Boolean defaultValue = null;
Boolean value = (fieldValue != null ? trueValue.equalsIgnoreCase(fieldValue) : defaultValue);
System.out.println(value);
}
Run Code Online (Sandbox Code Playgroud)
当defaultValue不等于null代码工作正常,但如果defaultValue是null在JVM抛出一个NullPointerException.此代码使用jdk 1.6.45编译.
为什么我得到这个例外?
假设我有一个名为的类Foo.
我无法更改Foo类,但我不想使用名为Bartype 的属性来扩展它string.
此外,我还有更多类,Foo所以我对"通用"解决方案感兴趣.
我正在调查ExpandoObject,dynamic它给了我我要求的结果,但我想知道它可以在不使用的情况下完成dynamic......
static void Main(string[] args)
{
var foo = new Foo() { Thing = "this" };
var fooplus = Merge(foo, new { Bar = " and that" });
Console.Write(string.Concat(fooplus.Thing, fooplus.Bar));
Console.ReadKey();
}
public class Foo
{
public string Thing { get; set; }
}
public static dynamic Merge(object item1, object item2)
{
if (item1 == null || item2 == null) …Run Code Online (Sandbox Code Playgroud) 我在这个(经常被引用的)示例项目中使用了一个数据包嗅探器.在实现HTTP数据包后,我注意到我收到的唯一HTTP数据包是请求,我没有收到任何响应.
我看过很多不同的来源,但由于使用的代码经常是相同的,我倾向于认为它可能是我自己的本地代码.
当我查看我的日志时,我发现每个数据包都有我的本地IP SourceIP,既包括HTTP数据包,也包含到达其他端口的数据包.
我在这里提供了一个工作示例,您可以将其复制粘贴到LINQPad中并且应该演示问题(添加System.Net和System.Net.Socket程序集).不要忘记以管理员身份执行LINQPad以访问套接字.
这导致192.168.0范围内有数百/数千个条目,总共3个IP地址异常引用我的托管服务提供商(使用检查nslookup).
private readonly byte[] _data = new byte[4096];
private Socket _mainSocket;
public void Capture()
{
_mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
_mainSocket.Bind(new IPEndPoint(GetLocalIP(), 0));
var byTrue = new byte[] {1, 0, 0, 0};
var byOut = new byte[] {1, 0, 0, 0};
_mainSocket.IOControl(IOControlCode.ReceiveAll, byTrue, byOut);
_mainSocket.EnableBroadcast = true;
_mainSocket.BeginReceive(_data, 0, _data.Length, SocketFlags.None, OnReceive, null);
}
private void OnReceive(IAsyncResult ar)
{
SocketError error;
var received …Run Code Online (Sandbox Code Playgroud) 我正在研究一个简单的LINQ查询的内存影响,并注意到LINQ查询创建了2个类型Enumerable+WhereListIterator<Int32>和的额外对象Func<Int32, Boolean>.
使用的代码是这样的:
static void Main(string[] args)
{
// Setting baseline snapshot
var list1 = new List<int> { 4862, 6541, 7841 };
var list2 = new List<int>(list1.Count);
var list3 = new List<int>(list1.Count);
// First snapshot: LINQ usage
list2.AddRange(list1.Where(item => item > 5000 && item < 7000));
// Second snapshot: foreach-loop
foreach (var item in list1)
{
if (item > 5000 && item < 7000)
{
list3.Add(item);
}
}
// End gather
Console.Read();
}
Run Code Online (Sandbox Code Playgroud)
在foreach循环之后的快照中,我注意到 …
下图显示"Checked"和"Unchecked"异常是其子类Exception.我发现你需要捕获一个令人困惑Exception但你不需要捕获一个RuntimeException直接继承的Exception.有没有理由让开发人员不让我们抛出异常而不需要抓住它们?
更具体地说:为什么你只能忽视RuntimeExceptions它和它的孩子?为什么没有一个被引入的类被引入CheckedException extends Exception,你只需要抓住它并且它是孩子们?
令人困惑的部分是,您可以RuntimeException毫无问题地将所有内容丢弃,但是当您向上移动到Exception层次结构中时,您需要在某个时刻捕获它.这很令人困惑,因为"抽象"通常会起作用.你向上移动的越多,所有东西都越简单,越多.这不是这种情况.你移动得越多,你就越需要做(比如,在到达后放置try/catch Exception).
请求:
我希望能够编写一个分析器,它可以为某个表达式提供代理值并触发重新解析文档.
动机:
我们的代码中充斥着ABTests,它们可以处于已部署或处于活动状态且具有控制和变体组.确定测试的状态是通过数据库查找完成的.对于使用控制组部署的测试,以下表单的任何语句都将计算为false:
if(ExperimentService.IsInVariant(ABTest.Test1))
{
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试提供工具,以便在开发时通过在这种情况下将其变灰来更容易处理.事实上,这是相当有限的,并不健壮,因为我基本上必须自己玩解析器.
如果实际代码是什么
if(!ExperimentService.IsInVariant(ABTest.Test1))
Run Code Online (Sandbox Code Playgroud)
要么
if(ExperimentService.IsInVariant(ABTest.Test1) || true)
Run Code Online (Sandbox Code Playgroud)
要么
var val = ..... && (ExperimentService.IsInVariant(ABTest.Test1);
if(val){
// val is always going to be false if we deployed control.
}
Run Code Online (Sandbox Code Playgroud)
我可以看到的一种可能的方法是允许我们编写一次触发的分析器并在实际的IDE解析发生之前重写树(或者,好吧,只是再次解析它).这些应该只发射一次并允许我们用另一个表达式替换某个表达式.这将允许我交换所有这些实验调用的真假文字.
因此,这些部分可以从所有其他IDE功能中受益,例如代码灰化无法访问的代码,还有更复杂的代码,例如永远不会有不同值的变量
显然这仅仅是一个例子,我不确定它是多么可行.对于正确的功能或已经存在的东西的任何建议都非常受欢迎.
如何对我自己的自定义分析器和代码修复提供程序进行单元测试?
我坐在电脑前,双手放在键盘上,但我不知道要输入什么.
c# ×8
.net ×2
java ×2
async-await ×1
dynamic ×1
exception ×1
linq ×1
networking ×1
reflection ×1
resharper ×1
roslyn ×1
sockets ×1
unit-testing ×1
websocket ×1