我试图概括通过一个对象的属性的更改通知,IObservable<T>但这是问题的重点.问题的关键在于:以下分配我报告了无效的协方差错误:
protected virtual void OnPropertyChanged<T>(
string propertyName,
T oldValue, T newValue)
{
IPropertyChangedNotification<Student, object> notification =
new PropertyChangedNotification<Student, T>(this,
propertyName, oldValue, newValue);
...
}
Run Code Online (Sandbox Code Playgroud)
这报告:
无法隐式转换
PropertyChangedNotification<UsingSubjectToWatchProperty.Student, T>为IPropertyChangedNotification<UsingSubjectToWatchProperty.Student, object>.存在显式转换(您是否错过了演员?)
这是完整的代码:
class Student
{
private ISubject<IPropertyChangedNotification<Student, object>> _subject =
new Subject<IPropertyChangedNotification<Student, object>>();;
private string _name = null;
public string Name
{
get
{
return _name;
}
set
{
var oldValue = _name;
_name = value;
OnPropertyChanged<string>("Name", oldValue, _name);
}
}
protected virtual void OnPropertyChanged<T>(string propertyName, T …Run Code Online (Sandbox Code Playgroud) 似乎没有FromEvent或方法的重载,仅在有多个参数且没有 的情况下FromEventPattern才会转换为具有该IObservable<T>类型的事件。TDelegateEventArgs
例如,我们似乎无法将以下内容转换为可观察量。
public event Action<int, int> SomethingHappened;
public event Func<string, int> SomethingElseHappened;
Run Code Online (Sandbox Code Playgroud)
我们要么必须EventArgs在某个地方有一个,要么TDelegate在其签名中只有一个参数。因此,以下内容是可转换的,因为它们有一个EventArgs隐式委托。
public event NameChangedHandler NameChanged;
public event EventHandler RollNumberChanged;
public event EventHandler<AgeChangedEventArgs> AgeChanged;
public delegate void NameChangedHandler(
object sender,
NameChangedEventArgs e);
Run Code Online (Sandbox Code Playgroud)
这个也可以转换,因为T它的参数只有一个。
public event Action<Tuple<string, string>> ClassChanged;
Run Code Online (Sandbox Code Playgroud)
如果我遇到这样的事件我该怎么办:
public event Action<T1, T2...> ItHappened;
Run Code Online (Sandbox Code Playgroud) 我有三个问题密切相关,因为它们是彼此诞生的,代表了一个思路,所以我在一个问题下发布它们.如果我单独发布它,我无法帮助我构建我的问题的大局.
1)你能用简单的语言解释一下SwingUtilities.invokeLater吗?我理解线程,我敢说了很多,但文档的语言仍然让我感到困惑.它说:
导致doRun.run()在AWT事件派发线程上异步执行.这将在处理完所有挂起的AWT事件后发生.当应用程序线程需要更新GUI时,应使用此方法.在以下示例中,
invokeLater调用将Runnable对象排队到doHelloWorld事件调度线程上,然后打印消息.
如果我付出一些努力来理解所说的内容,我认为这就是它所说的,但我不能确定它.我想它说:
该invokeLater方法仅在应用程序的主线程上调度主窗口创建和调度程序/消息泵的设置,而不是在单独的线程上.它通过发布消息来创建窗口并在主/主应用程序线程上设置它.换句话说,主要话题是对我们说:"你要我创建的窗口将在我完成其他现在的工作之后创建."
但后来有两件事让我感到困惑,我将其列为下面的两个问题.
2)那么为什么我需要将新窗口的消息循环实现为Runnable.这意味着我想要一个单独的线程来执行该消息循环.
3)我在创建窗口的函数和窗口的消息循环函数中打印出当前线程Id,它们都是不同的线程.那么,Swing中的每个窗口都在自己的线程上运行?那太疯狂了.你能告诉我这里发生了什么吗?如果你能在一段或两段中解释在Swing中创建的GUI应用程序的线程模型?
public static void main(String[] args) {
SwingUtilities.invokeLater(new MainWindowEventLoop());
System.out.println(String.format("Main thread %1$d started.",
Thread.currentThread().getId()));
}
public class MainWindowEventLoop implements Runnable {
@Override
public void run() {
JFrame mainWindow = new MainWindow("Main Window");
System.out.println(String.format("Main window loop running on thread %1$d.",
Thread.currentThread().getId()));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
主线程1开始了.
主窗口循环在线程14上运行.
我曾经认为一个程序集只能有一个main()方法,直到我在哥本哈根的微软办公室的视频讲座中看到Jon Skeet的MiscUtil.
所以,我写了这个有两个main()方法的小应用程序,如下所示:
namespace ManyMains
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
Console.ReadKey();
}
}
class YetAnotherProgram
{
static void Main()
{
Console.WriteLine("Yet another program.");
Console.ReadKey();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我在Visual Studio中设置了StartUp对象并且它有效.好吧,没有理由感到苦恼.然后,我想看看这个信息存储在程序集中的确切位置,所以我在反射器中打开了编译后的二进制文件,并且完全看不到这种效果的元数据.
我想知道是否将这种信息写入清单或PE图像的某些COFF标题中,这些标题在反汇编程序中无法看到但可以在十六进制编辑器中看到?
有很多术语,因为噪音很难学习你所追求的东西.
Linq to Entities只是对使用ADO.NET实体框架生成的实体使用Linq查询的做法吗?或者,这是一项独立的技术吗?
如果它不是一个单独的技术,为什么它有另一个令人困惑的名称,好像它是?
linq-to-entities entity-framework ado.net-entity-data-model entity-framework-4
我以前做过这么多次,但是我的记忆让我失望了,我觉得这有点愚蠢.
如何比较两种运行时类型?我假设System.Type不会覆盖==运算符,因此运算符执行引用相等性检查.
我想做一个价值平等.喜欢:
someObject.GetType() == GetTypeFromSomeAssemblyUsingReflection(
"Namespace.TypeName",
objAssemblyToGetTheTypeFrom);
Run Code Online (Sandbox Code Playgroud)
我可以使用,IsAssignableFrom()但这不会是我想要做的准确,因为它会扩大范围.我想把这些类型等同于我所做的:
if obj is Cat // where Cat is the name of a class
Run Code Online (Sandbox Code Playgroud)
要么
if ( (obj as Cat) != null )
Run Code Online (Sandbox Code Playgroud) 是否可以从两个数据库中创建实体模型,表中的所有关系都反映在模型中?你是怎样做的?
我指的是ADO.NET Entity Framework第4版.
只是阅读和思考:如果我await在主UI线程中调用一个方法,这就等于是一个阻塞调用,对,因为没有调用UI线程的线程?
例如:
int Main()
{
// This would be a blocking call, right?
await PrintTwoMillionTimes("Hello");
Console.WriteLine("Phew! Done!");
}
Run Code Online (Sandbox Code Playgroud) 我的MVC代码中有一个服务器端对象,如下所示:
class Person
{
public long Id { get; set; }
public string Name { get; set; }
public IList<Friend> Friends { get; set; }
}
class Friend
{
public long Id { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
从jQuery客户端,我正在发出ajax请求并发送以下数据(为了可读性而引入了换行符):
var personId = $(...
var personName = $(...
var friends = []; // array of associative arrays
for (var i = 0; i < _friends.length; i++) // _friends is is a global array object and …Run Code Online (Sandbox Code Playgroud) .NET框架中是否有一个类,如果给定一个序列/可枚举的键值对(或者其他任何我对此格式不严格)可以创建如下的查询字符串:
?foo=bar&gar=har&print=1
Run Code Online (Sandbox Code Playgroud)
我自己可以完成这个微不足道的任务,但我想我会要求自己避免重新发明轮子.当单行代码可以做到的时候为什么所有那些弦乐体操呢?
c# ×6
.net ×2
asp.net-mvc ×1
assemblies ×1
asynchronous ×1
entry-point ×1
java ×1
jquery ×1
jvm ×1
reflection ×1
swing ×1
task ×1