我有一个非常简单的例子:
class Program
{
class A
{
public bool B;
}
static void Main()
{
System.Collections.ArrayList list = null;
if (list?.Count > 0)
{
System.Console.WriteLine("Contains elements");
}
A a = null;
if (a?.B)
{
System.Console.WriteLine("Is initialized");
}
}
}
Run Code Online (Sandbox Code Playgroud)
行if (list?.Count > 0)
编译完美,这意味着如果list
是null
,表达式Count > 0
变为false
默认.
但是,该行if (a?.B)
抛出编译器错误,表示我无法隐式转换bool?
为bool
.
为什么一个人与另一个人不同?
假设您有一个使用T的方法的类.您还有相同名称的标准方法.
如果T与标准方法的类型相同,会发生什么?调用标准方法.
有什么方法可以强迫他打电话给T法吗?
使用系统;
namespace ConsoleApplication3
{
class Program
{
static void Main()
{
Generics<Int32> anInt = new Generics<Int32>(4);
Generics<String> aString = new Generics<String>("test");
}
}
public class Generics<T>
{
public T Member;
public String ErrorMessage;
public Generics(T member)
{
this.Member = member;
}
public Generics(String errorMessage)
{
this.ErrorMessage = errorMessage;
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个本身是内部的类,因此声明中的以下差异没有实际后果,但我想了解其背后的机制。
我有一个这样的财产:
public String CreditedAs { get; protected set; }
Run Code Online (Sandbox Code Playgroud)
它编译得很好。getter 可以被任何有权访问该类的人读取,setter 只能在该类或由该类派生的类中读取。
现在当我尝试这个时:
internal String CreditedAs { get; protected set; }
Run Code Online (Sandbox Code Playgroud)
我明白了
The accessibility modifier of the '{class}.CreditedAs.set' accessor
must be more restrictive than the property or indexer '{class}.CreditedAs'
Run Code Online (Sandbox Code Playgroud)
这是为什么?和
protected String CreditedAs { internal get; set; }
Run Code Online (Sandbox Code Playgroud)
也不行。
想象一下,你想要一个Save & Close
和Cancel & Close
你的花式WPF MVVM窗口上的按钮?
你会怎么做?MVVM规定你将按钮绑定到ICommand
控制器的反转并指示你View
可能知道你的ViewModel
但不是相反.
我在网上找到了一个解决方案,它有一个ViewModel
结束事件,View
订阅如下:
private void OnLoaded(Object sender
, RoutedEventArgs e)
{
IFilterViewModel viewModel = (IFilterViewModel)DataContext;
viewModel.Closing += OnViewModelClosing;
}
private void OnViewModelClosing(Object sender
, EventArgs<Result> e)
{
IFilterViewModel viewModel = (IFilterViewModel)DataContext;
viewModel.Closing -= OnViewModelClosing;
DialogResult = (e.Value == Result.OK) ? true : false;
Close();
}
Run Code Online (Sandbox Code Playgroud)
但是这与我迄今为止设计良好的MVVM混合在一起.
另一个问题是在显示主窗口时显示许可问题消息框.我可以再次使用Window
.Loaded
像我上面那样的事件,但这也打破了MVVM,不是吗?
在这些情况下,是否有一种干净的方式或者应该是实用的而不是迂腐的?
我似乎在内连接中有一个子查询有问题,但是我没有.
有一个m:n表构造,有3个表,其中只有2个与问题相关.
当我像这样创建一个完整的内部联接:
SELECT count( * ) AS Count, lastname, firstname
FROM DVDPROFILER_dvd_common_actor
INNER JOIN DVDPROFILER_dvd_actor ON DVDPROFILER_dvd_common_actor.caid = DVDPROFILER_dvd_actor.caid
WHERE DVDPROFILER_dvd_actor.caid > 0
GROUP BY DVDPROFILER_dvd_actor.caid
ORDER BY Count DESC
Run Code Online (Sandbox Code Playgroud)
我得到的正是我所期待的:顶级演员按照他在任何电影中记入的时间计算,即使多次担任多个角色也是如此.
我的目标是提取有关演员被分析的电影的数量的信息,我认为 - 我很天真 - 它应该像这样简单:
SELECT count( * ) AS Count, lastname, firstname
FROM DVDPROFILER_dvd_common_actor
INNER JOIN
(SELECT caid
FROM DVDPROFILER_dvd_actor
GROUP BY id) AS DVDPROFILER_dvd_actor
ON DVDPROFILER_dvd_common_actor.caid = DVDPROFILER_dvd_actor.caid
WHERE DVDPROFILER_dvd_actor.caid > 0
GROUP BY …
Run Code Online (Sandbox Code Playgroud) 在 VS 2010 中,源代码管理资源管理器只会记住您上次选择的 TFS 树,并再次跳转相同的分支和子文件夹。
VS 2015 总是从根节点开始,你每次都必须烦人地导航到你的工作分支。
有没有办法让它像2010年那样记住路径?
我有一个包含长字符串的列表框.
开头并不是所有与用户相关的,这就是为什么我想让列表框自动以编程方式向右滚动.
您可以垂直滚动到最后一项,但我还没有找到模拟用户滚动到右侧的方法.
有任何想法吗?
C#5.0规范在第7.1.3章中介绍
https://msdn.microsoft.com/en-us/library/ms228593.aspx
false
如果一个或两个操作数都是,则提升的运算符产生值null
.
但是测试也是这个MSDN链接
http://msdn.microsoft.com/en-us/library/2cf62fcy(v=vs.100).aspx
int? num1 = 10;
int? num2 = null;
// Change the value of num1, so that both num1 and num2 are null.
num1 = null;
if (num1 == num2)
{
// The equality comparison returns true when both operands are null.
Console.WriteLine("num1 == num2 returns true when the value of each is null");
}
/* Output:
* num1 == num2 returns true when the value of each is null
*/ …
Run Code Online (Sandbox Code Playgroud) 让我们说你有
class Program
{
static void Main()
{
bool a = GetFalse();
if (a)
{
a = GetTrue();
}
bool b = GetFalse();
b &= GetTrue();
}
static bool GetFalse() => (false);
static bool GetTrue() => (true);
}
Run Code Online (Sandbox Code Playgroud)
为什么GetTrue()
在b
已经错误的情况下执行?
&=
操作员是否应该认识到它永远不能评估为真?
c# ×7
nullable ×2
c#-6.0 ×1
code-behind ×1
data-binding ×1
generics ×1
inner-join ×1
listbox ×1
mvvm ×1
mysql ×1
overloading ×1
properties ×1
roslyn ×1
subquery ×1
tfs ×1
winforms ×1
wpf ×1