我有一个ObservableCollection,我需要引用一个特定的项目.如果该项目不存在,我需要通过Reactive Extensions监视它是否/何时出现项目,但在设置语句时需要一些帮助.我仍然不熟悉所有不同的Linq扩展如何工作,所以我不知道如何做到这一点.谁能指出我正确的方向?
为了更好地说明,我需要类似以下内容:
public class myitem :INotifyPropertyChanged
{
private string _key;
private string _value;
public string key
{
get { return _key; }
set { _key = value; NotifyPropertyChanged("key"); }
}
public string myvalue
{
//proper getter/setter, blah, blah
}
}
ObservableCollection<myitem> _collection = mycollection;
var x = Observable.FromEvent<NotifyCollectionChangedEventHandler, NotifyCollectionChangedEventArgs>(
h => new NotifyCollectionChangedEventHandler(h),
h => _collection.CollectionChanged += h,
h => _collection.CollectionChanged -= h);
string keywaitingfor = "thiskey";
string valuewaitingfor = x.Where(xx => xx.key == keywaitingfor).First().myvalue;
Run Code Online (Sandbox Code Playgroud)
这不完全是我的情景,但希望你能看到我正在尝试做的事情.ObservableCollection可能不包含任何要开始的项目,并且属性值是异步的.我知道最后一行是不对的,我需要在lambda中的类PropertyChanged事件上有一个Observable ...但我仍然对如何在满足两个条件时获得该值等待感到困惑.
我正在使用ASP.Net 4和MVC的网站上工作.我对WebForms和javascript很熟悉,并且使用过jquery,但捆绑让我感到困惑.据我所知,所有的javascript文件都包含在BundleConfig.cs中,并通过site.master文件中的标题下载.所以,我应该能够将我的附加函数和jquery调用放在新标签中.
但很明显,jquery函数应该进入文件的方式与我习惯的方式完全不同,而且根本无法获得任何操作.
是否有任何简短的教程可以告诉我在MVC中执行此操作的正确方法?而不是Razor,我这里不需要两条学习曲线.
是否有可能以某种方式为具有半透明图像的html页面添加水印,该图像仍然允许用户在其后面的页面上进行交互?矛盾,没有一些复杂的脚本似乎不可能,但也许我错过了一些东西.
我面临着在我的基类上创建一个静态方法的要求,但不喜欢我必须声明类型参数,所以我想知道我是否正确地采用这种方式.
基本上,我正在分配我将与课堂上的属性相关联的代表.我可以轻松地将该方法放在继承的类上,如下所示:
public class Foo
{
public string Property1 { get; set; }
}
public class InheritsFoo : Foo
{
public void AssignDel<TVal>(
Expression<Func<InheritsFoo, TVal>> expr,
Action<InheritsFoo, TVal> action)
{
}
}
Run Code Online (Sandbox Code Playgroud)
或者,在扩展类中,我可以这样做:
public static void AssignDel<T, TVal>(
this T source,
Expression<T, TVal>> expression,
Action<T, TVal> action)
where T : Foo
{
}
Run Code Online (Sandbox Code Playgroud)
这两个都可以让我AssignDel在实例化的类中使用:
var foo = new InheritsFoo();
foo.AssignDel(x => x.Property1, handler);
Run Code Online (Sandbox Code Playgroud)
但我要求制作AssignDel静态.这使得扩展方式无用.它仍然有效InheritsFoo,但我真的想把它移到基类.如果我尝试,无法推断泛型参数,我必须更改方法的用法:
InheritsFoo.AssignDel<InheritsFoo, string>(x => x.Property1, handler);
Run Code Online (Sandbox Code Playgroud)
有没有办法在这里,另一种方式这样做我没有想到?
编辑:在关于扩展方法是否应该工作的评论中解决问题...我去了@Mark M.引用的网址.如果我这样写的话......
InheritsFoo foo …Run Code Online (Sandbox Code Playgroud) 我正在尝试WeakReference使用4.5泛型实现创建一个s 列表,以便我可以避免类型检查和WeakReference目标的转换.但是,WeakReference<T>似乎不支持协方差,所以我试图建立一个解决方法.
我认为它应该是可行的,因为每个T都是特定继承链中的类型.那么,我在想的就是这样:
public class Animal { }
public class Tiger : Animal { }
public class Wolf : Animal { }
var mylist = new List<WeakReference<Animal>>();
mylist.Add(new WeakReference<Animal>(new Animal()));
mylist.Add(new WeakReference<Tiger>(new Tiger()));
mylist.Add(new WeakReference<Wolf>(new Wolf()));
Run Code Online (Sandbox Code Playgroud)
我已经尝试为WeakReference创建一个包装类(因为它是不可继承的),但这不起作用.无论如何,列表不会接受任何WeakReference其他类型的WeakReference<Animal>.
我可以创建我自己的通用WeakReference实现,但这似乎是打败了这一点,因为我在其中进行类型转换.我找不到任何文档,但我有点假设框架版本更好地处理这个问题.
有没有另外一种方法可以解决这个问题,我没想到,或者我是在咆哮错误的树?
我在VS 2010中的Silverlight项目已停止进入调试模式.即使我在Application类的构造函数中设置了断点,它也拒绝遇到任何断点.我的其他项目仍然很好,但我找不到任何可能意外更改的设置,以防止我调试.会发生什么事?
我有一个用C#编写的dll,并且暴露给COM.我在构建器中使用dll ...我可以实例化该类,但是在编译C#方法调用的返回值时遇到了问题.
C#
public string GetValue([MarshalAs(UnmanagedType.LPWStr)] string key)
{
return "value";
}
Run Code Online (Sandbox Code Playgroud)
导入到构建器中的已翻译函数:
virtual HRESULT STDMETHODCALLTYPE GetValue(LPWSTR key/*[in]*/,
BSTR* pRetVal/*[out,retval]*/) = 0;
Run Code Online (Sandbox Code Playgroud)
我对C++知之甚少.'key'参数传递得很好,因为我能够在参数上使用'MarshalAs'属性,但我要么不知道如何为返回值声明它,要么不知道如何调用在C++方面的功能(我尝试了几件事,只是猜测).
更新:好的,我只是通过采取Anton的例子并根据Hans的评论尝试修改来解决问题.Antons的回答正如他所展示的那样,但由于对内存管理问题的关注,我最终没有在C#中应用return属性,而C++代码调用函数如下:
BSTR result;
obj->GetValue(key, &result);
SysFreeString(key);
SysFreeString(result);
Run Code Online (Sandbox Code Playgroud)
我希望我可以赞扬这两个答案,帮助我解决这个问题,他们都必须向我提供我需要的信息.
c# ×4
generics ×2
jquery ×2
asp.net-mvc ×1
c++ ×1
com ×1
com-interop ×1
css ×1
html ×1
lambda ×1
linq ×1
marshalling ×1
silverlight ×1
static ×1