小编Net*_*led的帖子

获取参数的名称

我想在plsql中获取参数的名称.

例如,

procedure sp_example(myParam in varchar2) is

paramName varchar2(30);
begin
    paramName = 'myParam';
end
end procedure sp_example;
Run Code Online (Sandbox Code Playgroud)

有没有办法获得myParam使用反射的名称,而不是硬编码?

reflection plsql

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

同一列表中的多个泛型类型并调用它们的方法

我正在业余时间制作一个对象验证框架来学习一些东西,并可能将它用于一些学校项目。

我有我的通用规则类,它看起来像这样:

class Rule<T>
{
    string propertyName;
    Func<T, bool> ruleLambda;

    bool IsBroken(T value)
    {
        return ruleLambda(value);
    }
}
Run Code Online (Sandbox Code Playgroud)

将被验证的对象看起来有点像这样:

class Example
{
    List<Rule<?>> MyRules; // can take all types of rules

    List<Rule<T>> Validate<T>(string propertyName, T value)
    {
        List<Rule<T>> brokenRules = new List<Rule<T>>();
        foreach (Rule rule in MyRules.Where(r => r.propertyName == propertyName))
        {
            if (rule.IsBroken(value))
                brokenRules.Add(rule);
        }
        return brokenRules;
    }
}
Run Code Online (Sandbox Code Playgroud)

其中T value参数是 Example 类的属性之一的值,可以是任何类型。

Validate<T>只要设置了属性,就会调用该方法。

问题在于类的规则列表。特别是List<Rule<?>>上面的那一行。我想将给定类的所有规则存储在同一个列表中。

唉,C# 没有像 Java 那样的泛型类型的通配符。

我该怎么做?

使用对象而不是 T 的非通用接口或基类可以工作,但是我将如何调用通用 Rule …

c# generics

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

以编程方式解析COM参考

我正在尝试列出msbuild项目的所有引用及其在磁盘上的位置.

到目前为止,我可以得到项目引用和程序集引用就好了,但我有与COM引用的麻烦.这是项目文件中大多数引用的样子:

<COMReference Include="[name of assembly]">
  <Guid>{GUID-GOES-HERE}</Guid>
  <VersionMajor>1</VersionMajor>
  <VersionMinor>0</VersionMinor>
  <Lcid>0</Lcid>
  <WrapperTool>primary</WrapperTool>
  <Isolated>False</Isolated>
  <EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>
Run Code Online (Sandbox Code Playgroud)

我完全不知道如何获取COM DLL的路径.一些谷歌搜索告诉我,我可以查看HKEY_CLASSES_ROOT\CLSID\{GUID-FOUND-IN-PROJECT-FILE}\InprocServer32并获取密钥的默认值.当我使用regedit查看注册表时,它似乎是正确的,但每次我通过C#执行此操作时,注册表项始终为null.我也看了Wow6432Node\CLSID同样的结果.

谷歌搜索进一步显示了msbuild ResolveComReference任务以及如何使用Microsoft.Build命名空间以编程方式使用msbuild(ResolveComReference类),但我只发现如何使用此命名空间来构建整个项目,而不是执行单个任务.

如何使用项目文件中的信息获取COM DLL的位置?

编辑

这样做的原因是自动化我们的构建过程.一方面,这将让我们将COM DLL包含在我们的安装程序中(使用WiX的Heat工具或John Robbin的Paraffin工具).另一方面,它可以解决我们与msbuild的问题.我们让msbuild解决所有依赖关系.如果Project1和Project2都引用相同的COM DLL和Project1引用Project2,它会崩溃,因为它试图两次添加COM DLL.

c# com msbuild

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

插入后24小时删除记录

有没有办法在Transact-SQL中创建后24小时自动删除行?

我正在创建一个网站(学习体验),用户需要在注册后点击通过电子邮件发送的验证链接.我希望用户在24小时内验证自己.

我想我需要的是一个触发器,但我真的不确定语法,也不确定它是否可行.

sql t-sql sql-server

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

标签 统计

c# ×2

com ×1

generics ×1

msbuild ×1

plsql ×1

reflection ×1

sql ×1

sql-server ×1

t-sql ×1