小编Ste*_*ris的帖子

扩展FCL的System命名空间真的是一种不好的做法吗?

这是常识(和约定),其命名空间用来唯一标识代码,避免名称冲突,这就是为什么你应该始终把自己的代码中唯一的命名空间成为可能.

但是,......

命名空间还用于将逻辑相关的类组合在一起.我的个人库只是在Framework类库(FCL)上扩展,并实现了我在FCL中找不到的所有功能.它主要包含扩展和辅助类,以及其他高度可重用的类.我发现遵循与FCL中相同的命名空间结构非常有用.

我更进了一步,并开始使用FCL的命名空间将我的代码"注入"我真正期望它们的命名空间.

一个优点是您不必定义尽可能多的使用.例如,通过简单地引用库,可以立即使用扩展方法,而无需添加额外的使用.作为一个很好的例子(对于那些喜欢保持其使用列表清洁的人),您经常希望扩展方法有效,只是意识到您没有添加"使用System.Linq;" 然而?

更新:

所以我相信的主要优势(如评论中所述)是您可以更轻松地访问更多实用程序,而无需查找特定的命名空间.例如,如果您正在使用System.Collections.Generic,可立即使用扩展方法IList<T>.

我认为这种优势实际上可以超过劣势.我不会为将来可能发生名称冲突而烦恼,因为这表明FCL的新版本实际上包含了我想要的类似内容.它实际上更容易注意到FCL中的更改,无论如何我想在我的命名空间中反映出来.

当然,我知道如果每个人都开始为公共图书馆做这件事,那将会出现根本错误,但对于我个人的项目,我觉得它真的很有用.

我忽略了其他任何缺点吗?我已经考虑过如果我想让库公开,我需要找到一种方法来允许使用System命名空间,或者根据用户的需要使用不同的命名空间.我知道在.NET环境中执行此操作的唯一方法是使用预定义.

更新2:

所以,就像我说的那样,我确实意识到有些人可能会发现它不方便,并且需要一个不同的命名空间.对于我自己的项目,我觉得不方便做到如下:

using System.Windows;
using System.Windows.Controls;
using System.Windows.Media
using System.Windows.Media.Media3D;

using MyNamespace.Windows;
using MyNamespace.Windows.Controls;
using MyNamespace.Windows.Media;
using MyNamespace.Windows.Media.Media3D;
Run Code Online (Sandbox Code Playgroud)

更不用说这个问题,例如using MyNamespace.System.Windows;不可能.

要想出一个有希望产生更有用答案的问题:

有没有一种解决方案可以比将代码放在System命名空间中更好地解决这个问题?除了使用预定义之外,还有一种方法可以在需要时轻松编译到不同的命名空间,或者这是一个坏主意吗?

.net namespaces

3
推荐指数
1
解决办法
290
查看次数

MediaFoundation有像GraphEdit这样的东西吗?

GraphEdit仅适用于DirectShow,而不适用于使用MediaFoundation构建的拓扑.

是否有与MediaFoundation的GraphEdit类似的工具?

graphedit ms-media-foundation

3
推荐指数
1
解决办法
4012
查看次数

如何在XNA中正确卸载图形资源?

我正在开发一种使用大量纹理的游戏.因此,我需要在不再使用纹理时正确卸载纹理.

卸载纹理(也是顶点缓冲区,着色器和其他图形资源)的正确方法是什么?

我听说呼叫Dispose()不是正确的方法.

所有纹理都是通过加载完成的,Texture2D.FromStream所以根本不使用ContentManager.

.net c# xna

3
推荐指数
1
解决办法
585
查看次数

C#中的递归正则表达式

我正在用C#练习正则表达式.这是我的代码:

string test =
    "this is whole new line, with different parameters 10.1.2.1, 10.1.5.1, 10.1.3.1";
string a = Regex.Match(test, "10.[0-9].[0-9]+.[0-9]+").Value;
Console.WriteLine(a);
Run Code Online (Sandbox Code Playgroud)

结果是10.1.2.1.它找到第一场比赛就是这样.

如何递归执行此功能?我是否需要添加一些额外的代码,或者是否有一个正则表达式类,它具有内置函数(我更喜欢)?

.net c# regex

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

如何使用 SHOpenFolderAndSelectItems 而不选择项目?

我使用SHOpenFolderAndSelectItems来打开一个新的资源管理器窗口,显示特定位置(PIDL)。我对仅打开文件路径不感兴趣,所以我需要使用 PIDL据我所知,

但是,这有效,我对选择窗口中的任何项目都不感兴趣。如果我没有传递任何要选择的项目,则会根据文档打开父文件夹:

选择数组 apidl 中的项目计数。如果 cidl 为零,则 pidlFolder 必须指向描述要选择的单个项目的完全指定的 ITEMIDLIST。此函数打开父文件夹并选择该项目。

我怎样才能简单地打开我传递的 PIDL 指向的位置?

作为测试,我传递了一个要选择的项目,指向一个空指针。这似乎有效,但恐怕这可能会产生意想不到的副作用。这种行为似乎没有记录。有没有更好的方法来实现我想要实现的目标,或者我现在使用此函数的方式是否正确?

winapi windows-shell

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

通过Windows注册表安装Chrome扩展程序

我想通过Windows注册表安装Chrome扩展程序,如文档中所述.

我已经添加了新的注册表项

HKEY_LOCAL_MACHINE/SOFTWARE/Wow6432node/Google/Chrome/Extensions/bbfbifchphidhgjegibafmlnbfpkmlik
Run Code Online (Sandbox Code Playgroud)

在此我添加了一个新的字符串键"update_url":"https://clients2.google.com/service/update2/crx""version":"1.1.2",但在重新启动浏览器,新的扩展并没有在Chrome扩展页面添加.我使用的是Windows 7,64位.

Google论坛上帖子列出了类似的问题,但尚未发布任何解决方案.

我错过了什么?

registry google-chrome-extension

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

如何使用Double.TryParse方法(String,NumberStyles,IFormatProvider,Double)

我正在尝试解析具有值"-51.739253997802734"的经度.

var unknownGeoCoordinate = GeoCoordinate.Unknown;
double latitude;
double longitude;
var numberFormatInfo = new NumberFormatInfo { NumberDecimalSeparator = ".", NegativeSign = "\u2212", NumberNegativePattern = 1 };
const NumberStyles style = NumberStyles.AllowLeadingSign | NumberStyles.Number | NumberStyles.AllowDecimalPoint;

if (!double.TryParse(latLng.First(), style, numberFormatInfo, out latitude) || !double.TryParse(latLng.Last(), style, numberFormatInfo, out longitude))
    return unknownGeoCoordinate;
Run Code Online (Sandbox Code Playgroud)

条件

double.TryParse(latLng.Last(), style, numberFormatInfo, out longitude)
Run Code Online (Sandbox Code Playgroud)

始终返回false并且未设置经度.它只发生在前缀为" - "的字符串上.

.net c#

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

如何访问正在运行的应用程序的应用程序清单?

我需要找到一种方法来保证使用我的库的人在应用程序清单中将其设置requestedExecutionLevel为最小值highestAvailable,如下所示:

<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
  <requestedExecutionLevel level="highestAvailable" uiAccess="false" />
</requestedPrivileges>
Run Code Online (Sandbox Code Playgroud)

当他们没有正确设置清单时,我想抛出一个异常,以便开发人员知道这个需求,而不必阅读文档.

主要问题:是否可以访问此信息,如果是这样的话?

我没有检查此设置,而是考虑检查此设置的结果.设置为highestAvailableI 时,我希望管理员组的任何用户部分都以管理员身份运行.

这可以使用:

c# manifest

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

从重写中使用类委派时调用(基本)委派函数

当覆盖由类委托实现的接口方法时,是否可以从覆盖函数中调用通常委托给该类的类?类似于super使用继承时的调用方式。

文档中

interface Base {
    fun print()
}

class BaseImpl(val x: Int) : Base {
    override fun print() { print(x) }
}

class Derived(b: Base) : Base by b

fun main(args: Array<String>) {
    val b = BaseImpl(10)
    Derived(b).print() // prints 10
}
Run Code Online (Sandbox Code Playgroud)

请注意,重写将按您期望的那样工作:编译器将使用重写实现,而不是委托对象中的实现。

override fun print() { ... }
Run Code Online (Sandbox Code Playgroud)

如何BaseImpl print()从此重写函数中调用该函数?

用例是我想在重用现有实现的同时向此功能添加其他逻辑。

kotlin kotlin-delegate

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