小编Bev*_*van的帖子

为什么这个属性Getter是虚拟的?

对某些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?鉴于该属性既不是抽象的也不是虚拟的,我期望是假的.

为了完整性 …

.net c# reflection .net-3.5

11
推荐指数
3
解决办法
1783
查看次数

改进/修复C样式块注释的正则表达式

我正在编写(在C#中)一个简单的解析器来处理一个看起来很像经典C的脚本语言.

在我拥有的一个脚本文件中,我用来识别/*阻止注释*/的正则表达式将进入某种无限循环,占用100%的CPU.

我正在使用的正则表达式是这样的:

/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/
Run Code Online (Sandbox Code Playgroud)

有关为什么会被锁定的任何建议?

或者,我可以使用的另一个正则表达式是什么?

更多信息:

  • 使用面向.NET 3.5的C#3.0;
  • 我正在使用Regex.Match(string,int)方法在字符串的特定索引处开始匹配;
  • 我让程序运行了一个多小时,但比赛没有完成;
  • 传递给Regex构造函数的选项是RegexOptions.MultilineRegexOptions.IgnorePatternWhitespace;
  • 正则表达式适用于我的453个测试文件中的452个.

c c# regex parsing comments

10
推荐指数
2
解决办法
7530
查看次数

为什么我的RibbonWindow没有正确主题?

使用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)

c# wpf ribbon-control

9
推荐指数
1
解决办法
1461
查看次数

C#的任何"扩展"等价物?

我正在研究我的Mandelbrot屏幕保护程序的新版本,并且我的浮点精确度已经不足了- 简单的值没有足够的重要数据来满足我的需求.

更重要的数字=更大程度的放大分形

回到我在Delphi 7中编写这个屏幕保护程序的版本时,我使用了80位大小的扩展浮点类型.

在.NET中,我可以切换到十进制,但是这对性能的影响非常糟糕,分形生成速度减慢了20倍左右.

有没有相当于扩展的.NET?或者,是否有任何数字类型的精度高于double仍然使用FPU进行评估,因此不具有十进制的高性能命中?

更新

我的屏幕保护程序已经设法通过许多(很多!)数量级缩放分形; 目前,只有当使用的数字类型无法分隔相邻像素的纵坐标时,它才会重置为基础分形.来自双倍扩展改进的额外16位精度将使我接近16倍的大小倍增.

至于性能,我的算法已经设法消除了所需数学的95-99%(与计算许多像素的简单实现相比),同时保留了分形的完整性.

c# double performance floating-point-precision

7
推荐指数
1
解决办法
705
查看次数

将IsEnabled的约定添加到Caliburn.Micro

如何添加自定义的公约Caliburn.Micro的IsEnabled控件属性-像已经NameEnabled绑定到IsEnabled并行Name绑定到Text一个文本框.

在某种程度上,我想要实现的类似于CanSave属性可用于启用/禁用绑定到Save方法的按钮的方式,但对于所有控件都是通用的.

wpf caliburn.micro isenabled

6
推荐指数
1
解决办法
5600
查看次数

如何为我的Wpf UserControl实现DisplayMemberPath?

我正在为我的应用程序编写WPF用户控件,包装ListBox和其他一些项目.

ListBox有一个新的ItemTemplate,它为列表中的每个项目提供了四条信息.我可以将四个绑定中的每一个硬编码到列表项上的特定属性,它们显示正常.

但是,我希望我的UserControl更灵活一些.

ListBoxComboBox上有一个属性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)

wpf user-controls templates itemscontrol

5
推荐指数
1
解决办法
4371
查看次数

如何查找国家列表?

可能重复:
我在哪里可以获得所有国家/城市的列表以填充列表框?

在一个需要所有国家名单的系统上工作,我发现使用的常见"技巧"(*)CultureInfoRegionInfo给出一个不完整的清单(例如,缺少古巴).

(*)例如,请参阅.NET全球化命名空间中的ComboBox或DropDown的国家/地区列表.

鉴于这种方法失败了,有什么更好的方法呢?

我想我们可以依靠添加数据库表并手动填充国家/地区列表,但肯定会有更聪明的方法.

c#

5
推荐指数
2
解决办法
1万
查看次数

使用 X509Certficate 解密 JWT 令牌时出现 IDX10659 错误

我正在创建一个 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)

.net c# encryption x509certificate jwt

5
推荐指数
1
解决办法
1947
查看次数

验证时如何清理 SimpleInjector 创建的实例?

作为创建我的 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)

c# wpf simple-injector .net-core

5
推荐指数
1
解决办法
289
查看次数

屏幕保护程序是否仍必须安装到System32中?

回顾我在Delphi的日子,我写了几个屏幕保护程序-每个屏幕保护程序都是一个可执行文件,已放入该System32文件夹中,Windows XP Display控制面板在该文件夹中看到了该文件并使其可用。都好。

我现在正在用C#写一个复杂得多的屏幕保护程序,该屏幕保护程序必须分布在多个程序集中(它使用的是插件模型:将所有程序集合并到一个可执行文件中是不可行的)。

将所有文件转储System32似乎不是很整洁-更不用说它根本无法在64位系统上运行。

还有其他方法可以在Windows系统上安装屏幕保护程序吗?

如有必要,我愿意依赖Vista / Win7。

到目前为止,我唯一的建议是将通常的屏幕保护程序正常安装在下Program Files,并将触发器/启动器放入System32中。

.net c# windows screensaver

4
推荐指数
1
解决办法
3141
查看次数