我正在研究SOLID原则,并且有关于接口的依赖关系管理的问题.
我正在阅读的书中的一个例子(Gary McLean Hall的C#自适应代码)显示了一个TradeProcessor类,它将获取交易数据,处理它并将其存储在数据库中.交易数据由一个名为的类建模TradeRecord.甲TradeParser类将处理转换所接收到的交易数据TradeRecord例如(一个或多个).本TradeProcessor类只引用了ITradeParser这样它不依赖于接口TradeParser的实现.
作者使用该Parse方法(在ITradeParser界面中)返回一个IEnumerable<TradeRecord>包含已处理交易数据的集合.这ITradeParser是不是意味着现在依赖于TradeRecord班级?
作者不应该做一些像创建ITradeRecord接口并Parse返回ITradeRecord实例集合的东西吗?还是我错过了重要的事情?
这是代码(执行TradeRecord是无关紧要的,因此省略):
TradeProcessor.cs
public class TradeProcessor
{
private readonly ITradeParser tradeParser;
public TradeProcessor(ITradeParser tradeParser)
{
this.tradeParser = tradeParser;
}
public void ProcessTrades()
{
IEnumerable<string> tradeData = "Simulated trade data..."
var trades = tradeParser.Parse(tradeData);
// Do something with the parsed data...
} …Run Code Online (Sandbox Code Playgroud) 我在SSRS 2012中通过基于分组的分页来标记我的报告classname并且它运行良好.导出到Excel时如何更改选项卡名称?我尝试使用页面名称的表达式=Fields!classname.Value.这样做,它使我的所有4个选项卡都等于第一个分页符Sales Division.
我的标签是基于的分组classname,这在回报给我的4个标签:Sales Division,VRS,ClearCaptions,和IP-relay.
我知道“我如何安全地存储密码?” 问题在这里被问过很多次;我知道答案总是“永远不要这样做!存储哈希值,永远不要存储密码!使用 bcrypt!”
但是当您不能使用哈希进行身份验证时呢?例如:自动化流程。假设我编写了一个自动化应用程序,它需要登录到 SFTP 站点或某种需要用户名/密码的外部服务。我无法使用散列值对外部服务进行身份验证,那我该怎么办?
我标记这个问题有C#和ASP.NET,因为这些是两个领域,这个问题也适用于专门针对我的情况。
编辑:由于评论中提出的讨论,让我澄清我试图解决的威胁:我想防止攻击者能够读取用于访问外部服务的纯文本密码。这意味着如果他们以某种方式获得了对我们网络或数据库的非管理员访问权限,即使使用数据库转储,他们也无法读取纯文本密码。
使用Windows 10时,有什么方法可以调整BLE广告扫描间隔Windows.Devices.Bluetooth.Advertisement.BluetoothLEAdvertisementWatcher?在Android上进行扫描时,每100毫秒看到一次广告,但是在使用C#的Windows 10上,我BluetoothLEAdvertisementWatcher.Received大概每700毫秒就会抛出一个事件。
我使用 OpenSSL 创建了一个自签名证书,如下所示:
openssl req -x509 -sha512 -new keyrsa:2048 -keyout key2.pem -out cert2.pem -days 100
openssl pkcs12 -export -out pkcs12_cert_test2.pfx -inkey key2.pem -in cert2.pem
我已经安装pkcs12_cert_test2.pfx在 Windows 上,证书签名算法值为sha512RSA
然后,我在 C# .NET 4.0 中编写了以下代码:
public static bool DSHandler(string operation, string path, string devicePath)
{
bool result = false;
CryptoConfig.AddAlgorithm(typeof(USBSaferAppEFB.RsaPkCs1Sha512SignatureDescription),
"http://www.w3.org/2001/04/xmldsig-more#rsa-sha512");
string password = "xxxx";
bool validSignature = false;
byte[] hashchain = generateHash(path);
string digSignFile = Utils.RegVarValue(DIGSIGNFILE);
string subjectDN = Utils.RegVarValue(SUBJECTDN);
if (operation == "sign")
{
byte[] signature = SignFromContainer(hashchain, …Run Code Online (Sandbox Code Playgroud) 我DateTimePicker在我的 Windows 窗体应用程序中使用自定义格式:dd/MM/yyyy.
使用Segoe UI Light字体时,第一位数字被部分截断,如下所示:
向自定义格式(即" dd/MM/yyyy")添加空格/符号并不能解决问题。它只发生在Segoe UI Light(Segoe UI Regular很好) 时。
除了改变字体,我怎样才能阻止第一个数字被截断?
我使用的是 Visual Studio 2017,目标 .NET 框架是 4.7.2。
编辑:有趣的是,如果自定义格式设置为MM/dd/yyyy,当天的第一位数字被截断:图像
有没有办法找出是什么特定对象导致了NullReferenceException?我已经阅读了关于故障排除NullReferenceException的页面,它谈到了在调试器中检查变量并查看异常消息。
如果异常是在生产代码中引发的,因此您无法运行调试器来检查变量怎么办?异常消息显示了堆栈跟踪,因此您可以查看抛出异常的方法,但它没有说明是哪个特定对象null。
我希望能够将对象的名称添加null到错误消息中,这样当我查看用户的报告并遇到 . 时NullReferenceException,我可以轻松查看对象是什么null并修复它。有谁知道这样做的方法吗?
我也发现这个问题提出了同样的问题,但它是从 2011 年开始的,我不知道从那时起是否有任何变化。
编辑:这个问题,这是标记为重复的确是重复的,但也是很老的(2008)。从那以后有什么改变吗?
编辑 2:我在谷歌搜索这个问题时发现了这一点。Visual Studio 可以告诉你是什么抛出了NullReferenceException; 有什么方法可以利用它将其添加到日志文件中吗?
我有一个类似于以下格式的表:
id | name | year | Quality| Location |
------------------------------------------
1 | Apple | year1 | Good | Asia |
2 | Apple | year2 | Better | Asia |
3 | Apple | year3 | Best | Asia |
4 | Apple | year1 | Best | Africa |
5 | Apple | year2 | Bad | Africa |
6 | Apple | year3 | Better | Africa |
7 | Apple | year1 | Best | Europe …Run Code Online (Sandbox Code Playgroud) 我不确定如何解决这个问题,所以我将从"伪"代码开始:
List<Player> players = new List<Player>();
players.Add(p1);
players.Add(p2);
players.Add(p3);
while(true) //infinite loop
{
Player nextOne = players.Get(); // It will always get next player
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个集合/列表/缓冲区/数组等,它将具有某种"Get"方法,它总是返回下一个项目.当它到达终点时,它将返回第一项.
一个很好的例子就是纸牌游戏,比如扑克:我有玩家列表......我总是回到下一个玩家,就像在圈子里一样.
我的问题是:是否已经在C#/ .NET的某个地方实现了这样的集合?如果没有,是否正在为List最佳解决方案编写扩展方法?
我正在尝试Get-Help使用PowerShell从PowerShell脚本中提取注释标题。我正在读取的文件如下所示:
<#
.SYNOPSIS
Synopsis goes here.
It could span multiple lines.
Like this.
.DESCRIPTION
A description.
It could also span multiple lines.
.PARAMETER MyParam
Purpose of MyParam
.PARAMETER MySecondParam
Purpose of MySecondParam.
Notice that this section also starts with '.PARAMETER'.
This one should not be captured.
...and many many more lines like this...
#>
# Rest of the script...
Run Code Online (Sandbox Code Playgroud)
我想得到下面的所有文字.DESCRIPTION,直到的第一个实例.PARAMETER。因此,所需的输出将是:
A description.
It could also span multiple lines.
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
<#
.SYNOPSIS
Synopsis goes here. …Run Code Online (Sandbox Code Playgroud) c# ×8
.net ×1
.net-4.0 ×1
asp.net ×1
collections ×1
group-by ×1
hash ×1
linq ×1
list ×1
logging ×1
passwords ×1
powershell ×1
regex ×1
security ×1
sha ×1
ssrs-2012 ×1
ssrs-tablix ×1
windows-10 ×1
winforms ×1