对某些C#代码有一个奇怪的问题 - 当没有明确标记时,属性的Getter方法显示为虚拟.
该问题在此类上显示DbKey属性(代码完整):
public class ProcessingContextKey : BusinessEntityKey, IProcessingContextKey
{
public ProcessingContextKey()
{
// Nothing
}
public ProcessingContextKey(int dbKey)
{
this.mDbKey = dbKey;
}
public int DbKey
{
get { return this.mDbKey; }
set { this.mDbKey = value; }
}
private int mDbKey;
public override Type GetEntityType()
{
return typeof(IProcessingContextEntity);
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用反射来检查DbKey属性时,我得到以下(意外)结果:
Type t = typeof(ProcessingContextKey);
PropertyInfo p = t.GetProperty("DbKey");
bool virtualGetter = p.GetGetMethod(true).IsVirtual; // True!
bool virtualSetter = p.GetSetMethod(true).IsVirtual; // False
Run Code Online (Sandbox Code Playgroud)
为什么virtualGetter设置为True?鉴于该属性既不是抽象的也不是虚拟的,我期望是假的.
为了完整性 …
我正在编写(在C#中)一个简单的解析器来处理一个看起来很像经典C的脚本语言.
在我拥有的一个脚本文件中,我用来识别/*阻止注释*/的正则表达式将进入某种无限循环,占用100%的CPU.
我正在使用的正则表达式是这样的:
/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/
Run Code Online (Sandbox Code Playgroud)
有关为什么会被锁定的任何建议?
或者,我可以使用的另一个正则表达式是什么?
更多信息:
RegexOptions.Multiline和 RegexOptions.IgnorePatternWhitespace;使用ribboncontrolslibrary,当我运行我的应用程序时,标题栏看起来像W98应用程序.我该如何让它看起来漂亮?
编辑:似乎与Windows上使用的主题有关.
任何帮助,将不胜感激.
alt text http://img718.imageshack.us/img718/8188/321321.jpg
<r:RibbonWindow x:Class="Produccion_Dampers.main"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:r="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary"
Title="Window1"
Height="600"
Width="800">
<DockPanel>
<r:Ribbon DockPanel.Dock="Top" Title="my App looks like s***t">
</r:Ribbon>
</DockPanel>
</r:RibbonWindow>
Run Code Online (Sandbox Code Playgroud) 我正在研究我的Mandelbrot屏幕保护程序的新版本,并且我的浮点精确度已经不足了- 简单的双值没有足够的重要数据来满足我的需求.
更重要的数字=更大程度的放大分形
回到我在Delphi 7中编写这个屏幕保护程序的版本时,我使用了80位大小的扩展浮点类型.
在.NET中,我可以切换到十进制,但是这对性能的影响非常糟糕,分形生成速度减慢了20倍左右.
有没有相当于扩展的.NET?或者,是否有任何数字类型的精度高于double仍然使用FPU进行评估,因此不具有十进制的高性能命中?
更新
我的屏幕保护程序已经设法通过许多(很多!)数量级缩放分形; 目前,只有当使用的数字类型无法分隔相邻像素的纵坐标时,它才会重置为基础分形.来自双倍扩展改进的额外16位精度将使我接近16倍的大小倍增.
至于性能,我的算法已经设法消除了所需数学的95-99%(与计算许多像素的简单实现相比),同时保留了分形的完整性.
如何添加自定义的公约Caliburn.Micro的IsEnabled控件属性-像已经NameEnabled绑定到IsEnabled并行Name绑定到Text一个文本框.
在某种程度上,我想要实现的类似于CanSave属性可用于启用/禁用绑定到Save方法的按钮的方式,但对于所有控件都是通用的.
我正在为我的应用程序编写WPF用户控件,包装ListBox和其他一些项目.
ListBox有一个新的ItemTemplate,它为列表中的每个项目提供了四条信息.我可以将四个绑定中的每一个硬编码到列表项上的特定属性,它们显示正常.
但是,我希望我的UserControl更灵活一些.
在ListBox和ComboBox上有一个属性DisplayMemberPath(继承自ItemsControl),它似乎将适当的属性绑定"注入"标准ItemTemplate.
如何通过用户控件获得相同的结果?
我想设置四个新属性以允许配置显示的信息:
public string LabelDisplayPath { get; set; }
public string MetricDisplayPath { get; set; }
public string TitleDisplayPath { get; set; }
public string SubtitleDisplayPath { get; set; }
Run Code Online (Sandbox Code Playgroud)
使用Reflector查看ItemsControl.DisplayMemberPath似乎是在兔子洞里走下去,我无法理解它是如何工作的.
此外,如果我完全偏离正轨 - 而且我应该使用另一种更多的"WPF"技术,请指出我的方向.
更新
这是对我想要实现的目标的澄清.
我的用户控件中的ListBox每个项目显示四条信息:Label,Title,Subtitle和Metric
在一个地方,我想使用此用户控件来显示问题列表.每个问题看起来像这样:
public class Issue {
public string Code { get; set; }
public string Description { get; set; }
public string Priority { get; set; }
public string Reporter { get; set; } …Run Code Online (Sandbox Code Playgroud) 在一个需要所有国家名单的系统上工作,我发现使用的常见"技巧"(*)CultureInfo并RegionInfo给出一个不完整的清单(例如,缺少古巴).
(*)例如,请参阅.NET全球化命名空间中的ComboBox或DropDown的国家/地区列表.
鉴于这种方法失败了,有什么更好的方法呢?
我想我们可以依靠添加数据库表并手动填充国家/地区列表,但肯定会有更聪明的方法.
我正在创建一个 Web 服务和关联的客户端,它将使用由 X509Certficates 加密的 JWT。当我使用对称密钥加密和解密令牌时,一切正常。但是,我想在生产中使用基于 X509Certficates 的加密,当我尝试其中之一时,出现以下异常:
在 .NET Core 上运行时:
Microsoft.IdentityModel.Tokens.SecurityTokenKeyWrapException:
IDX10659: UnwrapKey failed, exception from crypto operation:
'Internal.Cryptography.CryptoThrowHelper+WindowsCryptographicException:
Key does not exist'
Run Code Online (Sandbox Code Playgroud)
在 .NET Framework 4.7 上运行时(注意内部异常有何不同):
Microsoft.IdentityModel.Tokens.SecurityTokenKeyWrapException:
IDX10659: UnwrapKey failed, exception from crypto operation:
'System.Security.Cryptography.CryptographicException:
Error occurred while decoding OAEP padding.'
Run Code Online (Sandbox Code Playgroud)
从 a 切换SymmetricSecurityKey到 aX509SecurityKey只是更改为 的实例提供的值EncryptingCredentials,所以我期待一切正常。
这是我生成令牌的代码:
public string Generate(NodeEntitlements entitlements)
{
if (entitlements == null)
{
throw new ArgumentNullException(nameof(entitlements));
}
var claims = CreateClaims(entitlements);
var claimsIdentity = new ClaimsIdentity(claims); …Run Code Online (Sandbox Code Playgroud) 作为创建我的 SimpleInjector 容器的一部分,我遵循了推荐的做法并调用container.Verify()以检查我的类型注册是否有意义。
这工作得很好,并且发现了我犯的许多错误 - 但它也会产生我想清理的碎片。
我的一个类是单例事件中心,用于在其他瞬态组件之间路由消息;这些其他组件在其构造函数中接受事件中心,创建订阅以接收他们有兴趣接收的消息,然后Dispose()在完成时创建订阅。
调用container.Verify()创建每种对象中的一个,导致大量这些其他瞬态实例徘徊,因为事件中心仍然知道它们的订阅。
目前,我通过Verify()在应用程序启动之前立即手动终止所有订阅来解决这个问题。然而,这感觉像是一个必须已经解决的问题,尽管我无法在文档、Stack Overflow 上或通过搜索找到答案。
也许使用有范围的生活方式是解决方案?它们似乎不相关,因为我正在构建 WPF 应用程序,但如果我知道答案,我就不会在这里问了!
1 月 12 日更新- 根据@steven 的要求,这里有一些代码来演示我的问题。
我尝试(但失败)用既可编译又足够短的内容来内联共享的东西来演示这个问题;相反,我展示了一些实际项目的代码摘录。如果您想查看整个内容,可以在 GitHub 上找到 WordTutor 项目。
在我的应用程序的核心,我有一个单例IReduxStore<T>,它既封装了应用程序状态,又充当了一种事件中心。其他类订阅存储以便在应用程序状态更改时主动通知。
这是IReduxStore<T>,精简到必需品:
// IReduxStore.cs
public interface IReduxStore<T>
{
T State { get; }
void Dispatch(IReduxMessage message);
IDisposable SubscribeToReference<V>(
Func<T, V?> referenceReader,
Action<V?> whenChanged)
where V : class, IEquatable<V>?;
}
Run Code Online (Sandbox Code Playgroud)
订阅落实IDisposable作为确定性清理方便和习惯的方法时,不再需要预订。
商店注册为单例,绑定到特定类型的状态:
// Program.cs
container.RegisterSingleton<
IReduxStore<WordTutorApplication>,
ReduxStore<WordTutorApplication>>(); …Run Code Online (Sandbox Code Playgroud) 回顾我在Delphi的日子,我写了几个屏幕保护程序-每个屏幕保护程序都是一个可执行文件,已放入该System32文件夹中,Windows XP Display控制面板在该文件夹中看到了该文件并使其可用。都好。
我现在正在用C#写一个复杂得多的屏幕保护程序,该屏幕保护程序必须分布在多个程序集中(它使用的是插件模型:将所有程序集合并到一个可执行文件中是不可行的)。
将所有文件转储System32似乎不是很整洁-更不用说它根本无法在64位系统上运行。
还有其他方法可以在Windows系统上安装屏幕保护程序吗?
如有必要,我愿意依赖Vista / Win7。
到目前为止,我唯一的建议是将通常的屏幕保护程序正常安装在下Program Files,并将触发器/启动器放入System32中。
c# ×8
wpf ×4
.net ×3
.net-3.5 ×1
.net-core ×1
c ×1
comments ×1
double ×1
encryption ×1
isenabled ×1
itemscontrol ×1
jwt ×1
parsing ×1
performance ×1
reflection ×1
regex ×1
screensaver ×1
templates ×1
windows ×1