小编Maj*_*cRa的帖子

C#6.0适用于.NET 4.0吗?

我创建了一个示例项目,使用C#6.0好东西 - 以null传播和属性初始化为例,设置目标版本.NET 4.0并且它...工作.

public class Cat
{
    public int TailLength { get; set; } = 4;

    public Cat Friend { get; set; }

    public string Mew() { return "Mew!"; }
}

class Program
{
    static void Main(string[] args)
    {
        var cat = new Cat {Friend = new Cat()};
        Console.WriteLine(cat?.Friend.Mew());
        Console.WriteLine(cat?.Friend?.Friend?.Mew() ?? "Null");
        Console.WriteLine(cat?.Friend?.Friend?.TailLength ?? 0);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是否意味着我可以将C#6.0功能用于我的面向.NET 4.0的软件?有任何限制或缺点吗?

.net c# c#-6.0

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

kotlin字符串模板中的格式

Kotlin有一个很棒的功能叫做字符串模板.我真的很喜欢它.

 val i = 10 
 val s = "i = $i" // evaluates to "i = 10"
Run Code Online (Sandbox Code Playgroud)

但是模板中是否可以有任何格式?例如,我想在kotlin中格式化字符串模板中的Double,至少在小数分隔符后设置一些数字:

val pi = 3.14159265358979323
val s = "pi = $pi??" // How to make it "pi = 3.14"?
Run Code Online (Sandbox Code Playgroud)

string-formatting kotlin

166
推荐指数
5
解决办法
10万
查看次数

使用新格式字符串记录变量数据

我使用python 2.7.3的日志工具.这个Python版本的文档说:

日志包提前更新格式化选项,如str.format()和string.Template.支持这些较新的格式化选项...

我喜欢花括号的"新"格式.所以我想尝试做类似的事情:

 log = logging.getLogger("some.logger")
 log.debug("format this message {0}", 1)
Run Code Online (Sandbox Code Playgroud)

并得到错误:

TypeError:并非在字符串格式化期间转换所有参数

我想念的是什么?

PS我不想用

log.debug("format this message {0}".format(1))
Run Code Online (Sandbox Code Playgroud)

因为在这种情况下,无论记录器级别如何,都始终格式化消息.

python string-formatting python-2.7

76
推荐指数
5
解决办法
4万
查看次数

C#6.0字符串插值本地化

C#6.0有一个字符串插值 - 一个很好的功能来格式化字符串,如:

 var name = "John";
 WriteLine($"My name is {name}");
Run Code Online (Sandbox Code Playgroud)

该示例转换为

 var name = "John";
 WriteLine(String.Format("My name is {0}", name));
Run Code Online (Sandbox Code Playgroud)

从本地化的角度来看,存储字符串更好:

"My name is {name} {middlename} {surname}" 
Run Code Online (Sandbox Code Playgroud)

而不是String.Format表示法:

"My name is {0} {1} {2}"
Run Code Online (Sandbox Code Playgroud)

如何使用字符串插值进行.NET本地化?是否有办法将$"..."放入资源文件?或者字符串应该像"...... {name}"一样存储,并以某种方式在飞行中进行插值?

PS这个问题不是关于"如何制作string.FormatIt扩展"(有很多这样的库,SO答案等).这个问题是关于"本地化"上下文中的"字符串插值"的Roslyn扩展(两者都是MS .NET词汇表中的术语),或者像Dylan提出的动态用法.

.net c# c#-6.0

65
推荐指数
6
解决办法
1万
查看次数

函数中单元返回的目的是什么

来自Kotlin文档:

如果函数没有返回任何有用的值,则其返回类型为Unit.Unit是只有一个值的类型 - Unit.VALUE.不必显式返回此值:

fun printHello(name : String?) : Unit { 
   if (name != null) 
     print("Hello, $name!") 
   else 
     print("Hi there!") 
   // We don't need to write 'return Unit.VALUE' or 'return', although we could 
}
Run Code Online (Sandbox Code Playgroud)

单位返回功能的目的是什么?为什么有VALUE?什么是VALUE?

kotlin

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

SQL Server CE 4.0性能比较

SQL Server CE 4(SQL Server Compact Edition 4.0)已不是新闻(如果是,您可以阅读本文)

但是看到SQL Server CE 4与其他数据库的性能比较非常有趣.

特别是:

  • SQLite的
  • SQL Server(1)
  • SQL Server Express*
  • 也许火鸟

(1)适用于功能相当的应用.

不幸的是,谷歌现在提供的主题并没有那么多链接.实际上我找不到任何(适当的SQL CE版本).

如果可以找到或分享这些信息,我们可以在这里收集它以供将来人道使用.

sql-server sqlite performance sql-server-ce

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

如何在WPF或WinForms中呈现公式

更新2018 TL; DR; LaTEX for WPF https://github.com/ForNeVeR/wpf-math

原始问题 我需要有一种方法在Windows窗体或WPF中绘制数学公式.一些"FormulaTextBox"控件正是我需要的.

我不是要问LaTEX的完整实现,但至少有一些超出RichTextBox的可能性,包括分割线,平方根等.

c# wpf user-controls winforms

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

检查'除了ImportError'内的模块名称

try:
   import MySQLdb
   # some action
except ImportError as err:
   # fallback code
Run Code Online (Sandbox Code Playgroud)

PyCharm给出了代码检查警告:

"除了ImportError"的try块中的'MySQLdb'也应该在除块之外定义

此检查检测应解决但不能解析的名称.由于动态调度和鸭子打字,这在有限但有用的情况下是可能的.顶级和类级别项比实例项更受支持.

好吧,我认为警告是合理的,因为fallback code假设没有安装'MySQLdb',而它可能是一些不同的错误,只是引发了ImportError.所以我使用了类似的东西:

try:
   import MySQLdb
   # some action
except ImportError as err:
   if "MySQLdb" in repr(err):
       # fallback code
   else:
       raise
Run Code Online (Sandbox Code Playgroud)

PyCharm警报仍然存在,但它可能只是一个PyCharm问题(谷歌显示此类检查的问题)

问题:

  1. 当你"除了ImportError"之外,真的值得检查名字吗?即使在简单的情况下(没有some action之后import MySQLdb)?

  2. 如果值得检查,上面的例子是正确的方法吗?如果不是 - 什么是正确的方法?

PS MySQLdb只是系统中可能缺少的模块的一个示例.

python exception-handling importerror pycharm

17
推荐指数
1
解决办法
5221
查看次数

命名管道服务器读取超时

使用C#NamedPipeServerStream时,如果客户端没有发送任何消息结束模式(如服务器使用ReadLine()读取时为\ r \n)NamedPipeServerStream Read方法将永远等待,并且没有Abort()或Interupt()方法将在那个线程上工作.

从以下版本开始:
1)NamedPipeServerStream不支持Stream.ReadTimeout
2)Abort()或Interupt()在线程
3 上不起作用)NamedPipeServerStream.Disconnect()nether work
目前还不清楚,如何在NamedPipeServerStream读取操作上设置超时?


让我举一个例子.IPC的规范我们要求交换\ 0终止的字符串.客户端发送消息,服务器处理消息,并且"必须"发送响应.如果客户端最终没有发送\ 0(客户端不是我们的,那么我们无法保证其正常工作),Read方法将永远等待,而客户端(因为我们不控制它)可能会永远等待也是一个回应.

接下来是一个简化的实现示例:

    public void RestartServer()
    {
        _pipeServerThread.Interrupt();  //doesn't affect Read wait
        _pipeServerThread.Abort();      //doesn't affect Read wait
    }

    private void PipeServerRun(object o) //runs on _pipeServerThread
    {
        _pipeServer = new NamedPipeServerStream(_pipeName, InOut, 100,
                      PipeTransmissionMode.Message, PipeOptions.WriteThrough);
        //_pipeServer.ReadTimeout = 100; //System.InvalidOperationException: Timeouts are not supporte d on this stream.

        // Wait for a client to connect
        while (true)
        {
            _pipeServer.WaitForConnection();
            string request = ReadPipeString();
            //... process request, send response and disconnect …
Run Code Online (Sandbox Code Playgroud)

c# ipc named-pipes

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

一种自动分离C++标头和实现的工具

当我从C#或python切换回C++并满足.h和.cpp分离时,我总是感到痛苦.

所以我想也许有一个工具可以在预编译步骤中采用标题(带有一些特殊扩展名的文件)并将其拆分为.h和.cpp?

所以,如果原始文件像这样:

class MyClass
{
public:

    void HaHaHa()
    {
       //some logic
    }
 }
Run Code Online (Sandbox Code Playgroud)

结果将是.h和.cpp文件:

//.h 

class MyClass
{
public:

    void HaHaHa();
}

// .cpp 

#include "MyClass.h"

void MyClass::HaHaHa() 
{
    //some logic
}
Run Code Online (Sandbox Code Playgroud)

一些谷歌搜索没有显示准​​备使用的工具.但我很确定这不是一个新想法,应该存在这样的工具.

PS众所周知,即Visual Assist X和VIM具有处理.h和.cpp分离的工具,减少痛苦.但我要问的是有可能在一个文件中包含一个代码,并将它们作为构建过程的一部分自动分开.

c++

8
推荐指数
1
解决办法
1835
查看次数