我在用户可编辑的标题中选择了#define,因此我随后希望检查定义是否存在以防用户完全删除它们,例如
#if defined MANUF && defined SERIAL && defined MODEL
// All defined OK so do nothing
#else
#error "User is stoopid!"
#endif
Run Code Online (Sandbox Code Playgroud)
这完全没问题,我想知道是否有更好的方法来检查是否有多个定义没有到位...即:
#ifn defined MANUF || defined SERIAL ||.... // note the n in #ifn
Run Code Online (Sandbox Code Playgroud)
或者可能
#if !defined MANUF || !defined SERIAL ||....
Run Code Online (Sandbox Code Playgroud)
删除空#if部分的需要.
遇到下面显示的代码行我觉得它可能是一个函数指针的转换,返回void并获取一个void指针,这是正确的吗?
(void (*)(void *))SGENT_1_calc
Run Code Online (Sandbox Code Playgroud) 是否有任何预定义功能可用于转换byte为BitArray?
一种方法是检查byte值的每一位,然后执行按位运算.我想知道是否有任何比这更简单的方法.
我有一个在课堂上暴露的不变的字典.
目前我的代码看起来像
using System.Collections.Generic;
using System.Collections.ObjectModel;
public class FooClass
{
private static ReadOnlyDictionary<string, byte> _validRevisions
= new ReadOnlyDictionary<string, byte>(
new Dictionary<string, byte>() {
{ "1.0", 0x00 },
{ "1.1", 0x01 },
{ "1.2", 0x02 },
{ "1.3", 0x03 }
} );
public static ReadOnlyDictionary<string, byte> ValidRevisions => _validRevisions;
// other FooClass contents...
}
Run Code Online (Sandbox Code Playgroud)
我已经使用了支持字段,_validRevisions因为我无法找到创建共享常量字典属性的更好方法.是否有更简洁的方法来管理这个或者我应该让这个领域公开?
我的主要问题是有一个较短的方法来初始化_validRevisions字段本身?创建一个内联字典以将其传递到一个字典(恰好是只读)似乎有点......代码味道.是吗?有没有更好的办法?
编辑:关于ROD的另一件事我刚才注意到,没有方法支持检查它是否包含给定值...是否有与之相关的原因'只读 - 是什么?
我在MS Visual Studio 2017中有一个C#WinForms项目.我添加了一个Visual Studio安装程序安装向导项目来为我的应用程序创建安装程序.这是我第一次使用安装程序项目.
安装程序正确具有.Net framework 4.5.1的先决条件.但是,我想让安装程序包含.Net框架安装,而不是要求用户在安装时单独下载和安装它(某些用户的计算机没有Internet连接).
我已经在安装属性页中设置了"从与我的应用程序相同的位置下载先决条件"的先决条件,但是当我构建设置时,我看到3个错误,如下所示:
错误:要在"先决条件"对话框中启用"从我的应用程序的相同位置下载先决条件",您必须为项目"Microsoft .NET Framework 4.6"下载文件"DotNetFX461\NDP461-KB3102436-x86-x64-AllOS-ENU.exe" .1(x86和x64)'到您的本地计算机.有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=616018.
包含的链接并不真正有用,因为它引用了ClickOnce安装.我有提到的NDP461 exe,但我不知道在哪里放.我看到一些其他问题提到使用MS Bootstrapper Package Manager创建一个bootstrapper包,但是这似乎已经从MS上关闭了code.msdn.microsoft而从互联网上消失了,显然没有关于替换的信息.此外,我可以在这个主题上找到的大多数文档和SO问题都与旧版本的MSVS有关,并且与MSVS 2017没有关联(至少不足以让我弄清楚!).
我如何实际获得安装项目以找到exe?我是否只需要将它放在正确的位置(已尝试过在各种MSDN页面和注册表项下列出的一些)?或者我需要创建一个bootstrapper包吗?如果是后者,是否有关于此过程的最新文档?谢谢!
PS:如果我选择使用已安装在我的开发机器上的(更新的).Net框架,那么这个过程会更容易吗?(我猜可能已经在某个地方的机器上安装了相关信息)
更新所以我尝试切换到目标.NET 4.6,下载NDP46-KB3045557-x86-x64-AllOS-ENU.exe并将其放在目录中C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\Packages\DotNetFX46.安装程序安装项目现在已构建,但会发出以下警告(同样,其中3个):
警告:"Microsoft .NET Framework 4.6(x86和x64)"中"PublicKey"属性的值与文件'C:\ Program Files(x86)\ Microsoft SDK\ClickOnce Bootstrapper\Packages\DotNetFX46\NDP46的值不匹配-KB3045557 86 x64的ALLOS-CHS.exe程序".
我想这意味着我不应该这样做吗?
我在Visual Studio 2017中有一个C#类库项目,我想为其创建一个类图.已安装类设计器.查看命名空间或类视图中任何类的上下文菜单,我在视图的菜单栏上看到"视图类图"选项以及相同的按钮.
但是,当我单击按钮或上下文菜单项时,似乎没有任何事情发生!回到Solution Explorer视图,我可以看到ClassDiagram1.cd文件已添加到项目中.尝试打开此文件会导致出现错误消息:
此项目类型不支持类图.
将类图文件添加到C#,VB或C++项目并尝试再次打开它.
我很高兴能够自己添加图表,而不是在无法生成的情况下生成图表.但我也无法将空白类图文件添加到项目中,因为该文件类型未出现在"添加新项"表单的文件类型列表中.
如何为类库中包含的类创建类图?或者类库可能不适用于库?如果后者是这种情况,那么有任何来自Microsoft的信息A)确认这一点,并且B)解释为什么程序中的类可以被图解而不是库中的类.(我已经花了一些时间在谷歌搜索这个问题,但没有找到任何特定的类库)
我有一个包含4列的表(ID(PK,int,NOT NULL),col1(NULL),col2(NULL),col3(NULL))
我想添加一个CHECK约束(我认为表级别?),以便:
if col1 OR col2 are NOT NULL then col3 must be NULL
Run Code Online (Sandbox Code Playgroud)
如果col3为NOT NULL,则col1 AND col2必须为NULL
即如果col1和col2不为null,则col3应为null,反之亦然
我是SQL和SQL服务器的新手,但我不确定如何实际实现它,即使它可以/应该实现?
我想也许:
CHECK ( (col1 NOT NULL OR col2 NOT NULL AND col3 NULL) OR
(col3 NOT NULL AND col1 NULL AND col2 NULL) )
Run Code Online (Sandbox Code Playgroud)
但我不确定是否可以使用括号将这样的逻辑分组?
如果没有,如何最好地实施?
我正在为对象使用对象初始st值设定项:
public class Container
{
public Container () { ContainedItem = new Item; }
public Item ContainedItem { get; set; }
}
public class Item
{
public string Value { get; set; }
}
var MyContainer = new Container()
{
// I want to populate the the property Value of the property Item
// with the second line rather than the first
ContainedItem = new Item() { Value = FooString }, // This works
ContainedItem.Value = FooString // …Run Code Online (Sandbox Code Playgroud) Julia 还没有在我的驾驶室里,但我得到了一个 Julia 项目来运行其中的代码。这由一个包含 a main.jl、 aProject.toml和 a的目录组成Manifest.toml。
我已经阅读了一些关于 TOML 文件的用途;总结一下我目前的理解,它们形成了一个项目或环境(不确定哪个,或者真正的区别是什么)。
我已经通过下载 tar、解压并放置在我的路径中,在命令行安装了 Julia v1.3.1。julia在命令行中键入会按预期打开 Julia CLI REPL。
我试图通过使用运行代码julia main.jl,这会导致对所需包不存在的抱怨,例如:
julia main.jl
ERROR: LoadError: ArgumentError: Package JSON not found in current path:
- Run `import Pkg; Pkg.add("JSON")` to install the JSON package.
Stacktrace:
[1] require(::Module, ::Symbol) at ./loading.jl:887
[2] include at ./boot.jl:328 [inlined]
[3] include_relative(::Module, ::String) at ./loading.jl:1105
[4] include(::Module, ::String) at ./Base.jl:31
[5] exec_options(::Base.JLOptions) at ./client.jl:287
[6] _start() at ./client.jl:460 …Run Code Online (Sandbox Code Playgroud) 我正试着安全地检查一下IList<>是不是空的.
var Foo = Bar.GimmeIListT(); // Returns an IList<SomeObject>
if (Foo?.Any())
// Do cool stuff with items in Foo
Run Code Online (Sandbox Code Playgroud)
但是条件有错误:
不能隐含地转换'bool?' 'bool'.存在显式转换(您是否错过了演员?)
因此,似乎条件评估为可空的布尔,所以我尝试
if (Foo?.Any().Value())
Run Code Online (Sandbox Code Playgroud)
但这也不好:
'bool'不包含'Value'的定义,也没有扩展.... blah blah blah
因此,在第一种情况下,它抱怨它是一个可以为空的布尔,但在第二种情况下,它抱怨它不是.
作为另一种途径,我尝试:
if (Foo?.Any() == true)
Run Code Online (Sandbox Code Playgroud)
这有效 - 但它不应该因为这使用了第一条消息说它不想要的隐式转换!
到底是怎么回事?这样做的正确方法是什么?