小编Sar*_*els的帖子

C#:编写MSIL以添加预处理程序指令

在C#中是否可以编写将向代码添加预处理程序指令的MSIL代码,例如#warning,如果满足某个条件?或许这可以通过反思完成,我不知道.

我正在尝试编写一个自定义属性,如果错误地应用于类的方法或属性,将生成编译器警告.使用现有Obsolete属性将无法工作,因为只使用我的自定义属性会导致警告,我不希望这样.我希望自定义属性构造函数检查条件,如果该条件为true,则导致编译警告.

更新: 在回顾了我的问题之后,我认为我所要求的是不可能的,因为我正在混合编译时和运行时约束.我想我最终将使用一个后期构建任务来检查刚刚构建的DLL,如果条件为真,它会发出错误消息.

c# reflection cil compiler-warnings c-preprocessor

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

使用与多重继承相关的接口的任何真实示例

我试图理解接口,以便我可以在我的程序中实现它们,但我无法想象我应该如何使用它们.还给我一些例如在C#中使用它们的多重继承

c# vb.net asp.net interface multiple-inheritance

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

C#内部getter,带有内部类参数的受保护setter

我有一个问题,想要一个属性有一个内部getter和一个受保护的setter,如本问题所述,我想我通过执行以下操作解决了这个问题:

public class Accessor : AccessorBase
{
    private Connection _connection;

    protected void setConnection(Connection value)
    {
        _connection = value;
    }

    internal Connection GetConnection()
    {
        return _connection;
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是,我现在收到此错误:

可访问性不一致:参数类型"连接"比方法"setConnection(连接)"更难访问

这是因为我有internal class Connection.我宁愿不做Connection公开课,同时Accessor 需要公开,所以如何在保持内部getter和受保护的setter的同时解决这个错误呢?

c# access-modifiers

7
推荐指数
3
解决办法
4737
查看次数

我应该允许用户在使用电子邮件作为用户名时更改电子邮件

我使用电子邮件地址作为用户名,并允许用户更改他们的电子邮件...这显然也会更改他们的登录信息.是否有任何理由允许这种灵活性成为一个问题?用户ID跟踪用户.

谢谢

language-agnostic

7
推荐指数
2
解决办法
2141
查看次数

检查MSTest单元测试中的输出

我想捕获发送到标准输出的输出和MSTest单元测试中的标准错误,以便我可以验证它.我在明确运行a之前捕获了输出Process,但有没有办法处理[我猜] MSTest进程本身?例如:

[TestMethod]
public void OutputTest()
{
    MySnazzyMethod("input", 1, 'c');
    string stdOutFromMySnazzyMethod = /* ??? */;
    Assert.AreEqual("expected output", stdOutFromMySnazzyMethod);
}
Run Code Online (Sandbox Code Playgroud)

c# mstest stdout redirectstandardoutput

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

可空类型和ReSharper警告

我有以下代码:

private static LogLevel? _logLevel = null;

public static LogLevel LogLevel
{
    get
    {
        if (!_logLevel.HasValue)
        {
            _logLevel = readLogLevelFromFile();
        }

        return _logLevel.Value;
    }
}

private static LogLevel readLogLevelFromFile() { ... }
Run Code Online (Sandbox Code Playgroud)

我在return关于可能性的声明中得到了ReSharper警告System.InvalidOperationException,它建议我检查_logLevel它是否是null第一个.然而,readLogLevelFromFile回报LogLevel,没有LogLevel?,所以没有办法的return时候语句可以达成_logLevelnull.这只是ReSharper的疏忽,还是我错过了什么?

c# resharper null nullable

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

jUnit和Guava,比较transform()之后的列表相等

在jUnit测试中,我想根据列从数据库中获取一些行name.然后我想测试我得到的行有我期望的名字.我有以下内容:

Set<MyClass> typesToGet = MyClassFactory.createInstances("furniture",
    "audio equipment");
Collection<String> namesToGet = Collections2.transform(typesToGet,
    new NameFunction<MyClass, String>());
List<MyClass> typesGotten = _svc.getAllByName(typesToGet);
assertThat(typesGotten.size(), is(typesToGet.size()));
Collection<String> namesGotten = Collections2.transform(typesGotten,
    new NameFunction<ItemType, String>());
assertEquals(namesToGet, namesGotten); // fails here
Run Code Online (Sandbox Code Playgroud)

我目前失败了:

java.lang.AssertionError:expected:com.google.common.collect.Collections2 $ TransformedCollection <[音频设备,家具]>但是:com.google.common.collect.Collections2 $ TransformedCollection <[音频设备,家具]>

那么什么是最干净,最简洁的测试方法,我从数据库中找回了哪些name列与我说的我想要的名字相匹配?我可以for循环迭代并检查一个列表中的每个名称是否存在于另一个列表中,但我希望更简洁.类似下面的伪代码会很好:

List<MyClass> typesGotten = ...;
["furniture", "audio equipment"].equals(typesGotten.map(type => type.getName()))
Run Code Online (Sandbox Code Playgroud)

java junit guava

7
推荐指数
3
解决办法
7493
查看次数

JSTL - 将formatDate与java.sql.Timestamp一起使用

我有一个标签,内容如下:

<%@ tag body-content="empty"%>
<%@ attribute name="timestamp" required="true" type="java.sql.Timestamp"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<jsp:useBean id="dateValue" class="java.util.Date" />
<c:if test="${not empty timestamp}">
    <jsp:setProperty name="dateValue" property="time" value="${timestamp}" />
    <span title="${timestamp}"> <fmt:formatDate value="${dateValue}"
            pattern="MM/dd/yyyy HH:mm" /> </span>
</c:if>
Run Code Online (Sandbox Code Playgroud)

但是我得到以下错误:

错误500:com.ibm.ws.jsp.JspCoreException:java.lang.IllegalArgumentException:无法将类型为java.sql.Timestamp的5/1/12 10:36 AM转换为long

我试图按照这个答案将时间戳转换为JSTL中的日期,所以我不会在servlet中更改任何内容.如何使用JSTL 将a转换java.sql.Timestamp为日期以便formatDate可以使用它?

java timestamp servlets jstl jsp-tags

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

使用RSA加密/解密时会间歇性地发生CryptographicException

我正在尝试使用C#中的RSA加密和解密数据.我有以下MSTest单元测试:

const string rawPassword = "mypass";

// Encrypt
string publicKey, privateKey;
string encryptedPassword = RSAUtils.Encrypt(rawPassword, out publicKey, out privateKey);
Assert.AreNotEqual(rawPassword, encryptedPassword,
    "Raw password and encrypted password should not be equal");

// Decrypt
string decryptedPassword = RSAUtils.Decrypt(encryptedPassword, privateKey);
Assert.AreEqual(rawPassword, decryptedPassword,
    "Did not get expected decrypted password");
Run Code Online (Sandbox Code Playgroud)

它在解密过程中失败,但有时只会失败.似乎每当我设置断点并逐步完成测试时,它就会通过.这让我觉得也许有些事情没有及时完成解密才能成功发生,而且我在调试过程中放慢了步伐,给了它足够的时间来完成.当它失败时,它似乎失败的行是decryptedBytes = rsa.Decrypt(bytesToDecrypt, false);在以下方法中:

public static string Decrypt(string textToDecrypt, string privateKeyXml)
{
    if (string.IsNullOrEmpty(textToDecrypt))
    {
        throw new ArgumentException(
            "Cannot decrypt null or blank string"
        );
    }
    if (string.IsNullOrEmpty(privateKeyXml))
    {
        throw new ArgumentException("Invalid private …
Run Code Online (Sandbox Code Playgroud)

c# security encryption rsa rsacryptoserviceprovider

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

XSLT - 选择另一个节点之后的节点

我正在尝试选择所有节点1)来自具有特定属性的节点并且2)自己具有特定属性.所以,如果我有以下XML:

<node id="1"><child attr="valueOfInterest"/></node>
<node id="2"><child attr="boringValue"/></node>
...
<node id="3"><child attr="valueOfInterest"/></node>
<node id="4"><child attr="boringValue"/></node>
<node id="5"><child attr="boringValue"/></node>
<node id="6"><child attr="boringValue"/></node>
...
Run Code Online (Sandbox Code Playgroud)

我的XSLT遍历每个node标记.在每一个node,我希望它选择所有以前node因为最近发生的小号node是有childattrvalueOfInterest.所以,如果我在节点#2,我想要一个空节点集.如果我在节点#6,我想选择节点#4和5.我目前有以下XSLT:

<xsl:variable name="prev_vals"
    select="preceding-sibling::node/child[@attr = $someValueICareAbout]/@attr"/>
Run Code Online (Sandbox Code Playgroud)

因此,此XSLT获取attr特定值的所有先前值.如何只得到这些前attr值是在node经过最近而来小号node,其child有一个特定的attr值(即,"valueOfInterest")?标签id上的属性node不保证会增加,因此我们无法与之进行比较.

编辑: 我认为这些可能有用:

<xsl:variable name="prev_children_of_interest"
    select="preceding-sibling::node/child[@attr != $someValueICareAbout]"/>
<xsl:variable name="mru_child_of_interest"
    select="$prev_children_of_interest[count($prev_children_of_interest)]"/>
Run Code Online (Sandbox Code Playgroud)

所以以前的所有child标签都有attr=valueOfInterest,然后是最近使用的(最接近当前节点)child标签,它具有我正在寻找的属性.从mru_child_of_interest我们可以找到最近使用的parent标记,但是我们如何查找该标记之后的节点?

xml xslt select xquery

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