从MSDN文档中,以下两个片段是相同的:
bool value;
int x = (value) ? 0 : 1;
Run Code Online (Sandbox Code Playgroud)
和
bool value;
int x;
if (value)
x = 0;
else
x = 1;
Run Code Online (Sandbox Code Playgroud)
太棒了,很棒.我用它所有的时间.Terse和有效.
如果我们尝试使用可空类型,如下所示:
int? x = (value.HasValue) ? value.Value : null;
Run Code Online (Sandbox Code Playgroud)
我们得到一个编译时错误:
The type of conditional expression cannot be determined
because there is no implicit conversion between '{NullableType}' and null.
Run Code Online (Sandbox Code Playgroud)
编译好:
int? value;
int? x;
if (value.HasValue)
x = value.Value;
else
x = null;
Run Code Online (Sandbox Code Playgroud)
所以,我理解编译器需要(int?)null以编译第一个语句的方式进行显式转换.我不明白的是为什么在该陈述中需要它,而不是If Else块.
我在创建一个可以动态创建变量类型对象的子项时遇到了麻烦.这是我想要实现的一个例子:
class systemSettings
'some properties
end class
Class fireSystemSettings
inherits systemSettings
'some additional properties
end class
Class windSystemSettings
inherits systemSettings
'some additional properties
end class
sub createSystem(systemType as Type, arg1 as object, arg2 as object)
Dim newSystem as New systemType(arg1, arg2)
systemCollection.add(newSystem)
end sub
Run Code Online (Sandbox Code Playgroud)
我无法让它发挥作用.我做了一些研究,看了泛型类型,反射和其他工具,但我无法确定如何最好地解决这个问题.
我不确定这个标题是否表达了我的意思,如果你能用句子更好地定义这个问题,请改变它.
我想迭代一个T的集合,但我没有使用(T)对象,而是想要检索(T)object.SomeProperty.
我怎么做:
List<Car> _cars;
FillList(_cars);
foreach (Car car in _cars)
{
Windshield ws = car.Windshield;
ws.DoWorkA();
ws.DoWorkB();
ws.DoWorkC();
}
Run Code Online (Sandbox Code Playgroud)
我喜欢做什么:
List<Car> _cars;
FillList(_cars);
foreach (Car car in _cars using ws as Windshield = car.Windshield)
{
ws.DoWorkA();
ws.DoWorkB();
ws.DoWorkC();
}
Run Code Online (Sandbox Code Playgroud)
有没有办法成为一个更懒惰的程序员?
我已经为Excel创建了一个应用程序级外接程序来自动执行某些任务.我使用VS2012模板Visual C#> Office> 2010> Excel 2010加载项.
我没有在每次Excel打开操作窗格时,而是选择按照以下说明创建自定义功能区选项卡:
http://msdn.microsoft.com/en-us/library/vstudio/bb386104.aspx
但是,当我构建项目时,标签不会显示.我已验证加载项正在加载,并且除Ribbon之外,其所有功能都正常运行.我创建了一个简单的表单来测试它,它按预期加载.
然后我尝试创建Excel 2010工作簿项目.添加功能区(使用与以前相同的步骤)并构建项目后,它只是工作; 功能区选项卡按预期显示.
我已经尝试重写ThisAddIn.CreateRibbonExtensibilityObject()以返回我的功能区对象,通过Globals.Factory.GetRibbonFactory().CreateRibbonManager创建.再一次,没有骰子.
我现在不知所措.
我有两个方法接受一个字符串并删除任何"无效"字符(哈希集中包含的字符).一种方法使用Linq.Where,另一种方法使用循环w/char数组.
Linq方法需要几乎两倍的长度(208756.9滴答)与循环(108688.2滴答)
LINQ:
string Linq(string field)
{
var c = field.Where(p => !hashChar.Contains(p));
return new string(c.ToArray());
}
Run Code Online (Sandbox Code Playgroud)
环:
string CharArray(string field)
{
char[] c = new char[field.Length];
int count = 0;
for (int i = 0; i < field.Length; i++)
if (!hashChar.Contains(field[i]))
{
c[count] = field[i];
count++;
}
if (count == 0)
return field;
char[] f = new char[count];
Buffer.BlockCopy(c, 0, f, 0, count * sizeof(char));
return new string(f);
}
Run Code Online (Sandbox Code Playgroud)
我的期望是LINQ会击败或者至少可以与循环方法相媲美.循环方法甚至没有优化.我必须在这里遗漏一些东西.
Linq.Where是如何在幕后工作的,为什么它会失去我的方法?
尝试使用一些非常有限的知识和经验来处理SQL查询.尝试了很多我通过搜索找到的东西,但没有想出我想要的结果.
我有四张桌子:
ORDERS
[ID][DATE]
ORDER_DETAILS
[ID][ITEM_NO][QTY]
ITEMS
[ITEM_NO][DESC]
KITS
[KIT_NO][ITEM_NO]
Run Code Online (Sandbox Code Playgroud)
Re:KITS - [KIT_NO]和[ITEM_NO]都是ITEMS表的FK.它们的串联是PK.
我想选择ORDERS,ORDERS.DATE,ORDER_DETAILS.ITEM_NO,ITEMS.DESC
没问题.一些简单的内部联接,我正在路上.
困难在于在select语句中添加一个列,IS_KIT如果符合以下情况则为true:
EXISTS(SELECT null FROM KITS WHERE KITS.ITEM_NO = ORDER_DETAILS.ITEM_NO).
(如果工具包表包含该项,则标记此行)
有没有办法计算该列?