我很高兴在编码的中间,然后我尝试在调试模式下启动我的应用程序,但我收到此错误消息.
无法激活Windows应用商店应用
由于其许可证存在问题,此应用程序无法启动
该应用程序在几分钟前推出正常,所以这是一个惊喜.我尝试重新启动Visual Studio,但这样做没有帮助.
我想,昨天我得到了令人讨厌的"更新你的开发者许可证"对话框.它没有问题地更新了.
如何使此错误消息消失,以便我可以调试我的应用程序?
我想创建一个可以使用此语法的附加属性:
<Button>
<Image .../>
<ui:ToolbarItem.DisplayFilter>
<TabItem .../>
<TabItem .../>
<TabItem .../>
</ui:ToolbarItem.DisplayFilter>
</Button>
Run Code Online (Sandbox Code Playgroud)
这是我尝试这样做的:
public class ToolbarItem
{
/// <summary>
/// Identifies the DisplayFilter attached property.
/// </summary>
public static readonly DependencyProperty DisplayFilterProperty =
DependencyProperty.RegisterAttached(
"DisplayFilter",
typeof( IList ),
typeof( ToolbarItem )
);
public static IList GetDisplayFilter( Control item ) {
return (IList)item.GetValue( DisplayFilterProperty );
}
public static void SetDisplayFilter( Control item, IList value ) {
item.SetValue( DisplayFilterProperty, value );
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这会在分析时导致异常 - System.ArgumentException:TabItem不是属性'DisplayFilter'的有效值.那么如何配置我的附加属性以便我可以使用所需的XAML语法?
什么是简短,优雅,按位的方式来编写这个C#代码的最后一行而不写b两次:
bool getAsIs = ....
bool b = ....
getAsIs ? b : !b
Run Code Online (Sandbox Code Playgroud) 运行此代码后:
var input = new List<T>( ... );
var result = input.Select( t => new U(t) );
U first1 = null;
foreach ( U u1 in result )
if ( first1 == null )
first1 = u1;
U first2 = null;
foreach ( U u2 in result )
if ( first2 == null )
first2 = u2;
Run Code Online (Sandbox Code Playgroud)
然后'first1 == first2'评估为false,即使两个U都包含相同的T.我还没有测试它,但我认为可以通过链接.ToList()或.ToArray()来评估为true进入Select()调用.
在比这个简单的插图复杂得多的实际代码中,用于决定是否应该附加.ToList()或.ToArray()的好经验法则是什么?我最初的想法是要么可以多次迭代的任何引用表达式,要么在潜在迭代不明显的情况下更安全,任何引用的表达式,其结果永远不会改变.
我有一个递归的一对多关系,其默认延迟值为true.如果我在SubCategories映射上有lazy ="false",我可以用NH API编写哪些代码来有效地检索整个树?
这是递归的一对多关系:
<class name="Category" lazy="false">
...
<list name="SubCategories" fetch="subselect">
<key column="ParentCategoryID"/>
<index column="PositionInList"/>
<one-to-many class="Category"/>
</list>
Run Code Online (Sandbox Code Playgroud)
我没有在列表中指定lazy ="false",因为在我需要运行的大约一半查询中需要懒惰.我在列表上有fetch ="subselect"作为我管理检索整个树时的优化.
我已经尝试过ICriteria API:
session.CreateCriteria<Category>().SetFetchMode( "SubCategories", FetchMode.Eager ).Add( Restrictions.IsNull("ParentCategory") ).SetResultTransformer( CriteriaSpecification.DistinctRootEntity ).List<Category>();
Run Code Online (Sandbox Code Playgroud)
但这只是急切地加载了层次结构中的第一级.
我需要类似于AggregateWhile方法的东西。标准System.Linq.Enumerable类不提供它。到现在为止,我一直能够利用标准的 LINQ 方法来解决我遇到的每个问题。所以我想知道在这种情况下这是否仍然可行,或者我是否真的需要使用非标准方法扩展 LINQ。
假设的AggregateWhile方法将迭代一个序列并应用累加器。一旦谓词返回false,聚合就会完成。结果是元素的聚合,直到但不包括谓词失败的元素。
这是一个例子。我们有一个List { 1, 2, 3, 4, 5 }带累加器的累加器,它将两个输入数字相加,以及一个声明累加必须小于 12 的谓词。 AggregateWhile将返回 10,因为这是 1 + 2 + 3 + 4 的结果,并且添加最后的 5 将推动总量超限。在代码中:
var list = new List<int> { 1, 2, 3, 4, 5 };
int total = list.AggregateWhile( (x, y) => x + y, a => a < 12 ); // returns 10
Run Code Online (Sandbox Code Playgroud)
我需要一个纯函数式解决方案,因此关闭临时变量不是一种选择。
投掷表达式适用于这种情况:
string myStr;
public MyObj( string myStr ) =>
this.myStr = myStr ?? throw new ArgumentNullException( "myStr" );
Run Code Online (Sandbox Code Playgroud)
但为什么不编译呢?
bool isRunning;
public void Run() =>
isRunning = !isRunning || throw new InvalidOperationException( "Already running" );
Run Code Online (Sandbox Code Playgroud) 我有一个用C#编写的Internet Explorer加载项,它通过WCF命名管道与.NET桌面应用程序进行通信.桌面应用程序为netNamedPipeBinding创建ServiceHost,IE加载项的每个实例都创建一个ChannelFactory以与应用程序通信.在Windows XP下一切正常,但在Windows 7的IE保护模式下会抛出异常.
System.ServiceModel.CommunicationException:无法连接到端点'net.pipe://localhost/MyApp.MyID'.---> System.IO.PipeException:'\.\ pipe ... guid ...'存在管道端点,但连接失败:访问被拒绝.(5,0x5)
在受保护模式下运行加载项是我必须支持的方案.我的理解是,如果我降低命名管道的完整性级别,那么我的IE加载项将被允许通过它进行通信.我的问题是如何做到这一点.我有设置使用WCF的东西,并且最好是保持这种方式.我可以让WCF创建具有较低完整性级别的命名管道吗?我写了什么代码来实现这一目标?
使用反射,我试图从无参数构造函数创建一个委托,如下所示:
Delegate del = GetMethodInfo( () => System.Activator.CreateInstance( type ) ).CreateDelegate( delType );
static MethodInfo GetMethodInfo( Expression<Func<object>> func )
{
return ((MethodCallExpression)func.Body).Method;
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个例外:"无法绑定到目标方法,因为它的签名或安全透明性与委托类型的不兼容." 什么会奏效?
请注意,自上一版本的.NET以来,至少为此配置文件移动了CreateDelegate.现在它在MethodInfo上.
我已经读过反应式编程的基本思想,即基于源值表达式随时间变化的变量.我甚至使用表达式实现了这一点.但后来我看看微软的Reactive Extensions(Rx)并看到完全不同的东西.随着时间的推移,自我更新的变量在哪里?没有人看到.只是通过事件参数枚举的一些奇特方式.
所以我的问题是:Rx真的是"反应性"的吗?我们现在看到的功能现在是未来的前奏吗?或者是微软不小心抛出一个流行词?或者我完全忽略了这一点(在这种情况下,我希望你解释一下)?
编辑: 我已经得到了一些很好的答案与Rx的描述,此外问题被关闭.:(但我仍然希望听到更多的:
c# ×6
.net-4.5 ×2
linq ×2
.net ×1
bho ×1
c#-7.0 ×1
named-pipes ×1
nhibernate ×1
reflection ×1
throw ×1
wcf ×1
wpf ×1