我最近一直在研究功能编程,并希望将一些概念带到我的C#世界.我正在尝试编写函数来创建服务(或任何你称之为的服务),而不是创建具有可注入依赖项的类.
我想方设法通过创建一个像这样的静态方法,用两个参数和一个返回参数来部分应用一个函数(与注入依赖项具有相同的效果):
// this makes a func with a single arg from a func with two
static Func<T2, TResult> PartiallyApply<T1, T2, TResult>(
Func<T1,T2, TResult> f,
T1 t1)
{
// use given t1 argument to create a new function
Func<T2, TResult> map = t2 => f(t1, t2);
return map;
}
Run Code Online (Sandbox Code Playgroud)
这工作,但我想传递一个静态方法,如下所示:
static string MakeName(string a, string b) => a + " " + b;
Run Code Online (Sandbox Code Playgroud)
当我尝试连接它时,我得到错误The type arguments for method 'Program.PartiallyApply<T1, T2, TResult>(Func<T1, T2, TResult>, T1)' cannot be inferred …
在Jon Skeet的"C#in depth"中,我正在阅读(第511页):
所有数组都派生自System.Array,它们是CLR中唯一直接支持的集合(我的重点).
我想知道这意味着什么,特别是与没有这种支持的类型有关.在解释IL时,所有没有此类支持的类型是否都是由CLR所做的类型组合而成的?CLR没有"知道"没有这种支持的类型吗?
也在p.本书512:
C#编译器以多种方式内置了对数组的支持.
这在某种程度上与Array类型在CLR中的直接支持有关,还是这两个单独的东西?
我正在使用jquery datepicker,但是当用户更改月份时,它会自动将年份更改为设置为最小日期的年份.我不明白为什么会发生这种情况,它似乎也随机发生.
这是我的功能:
function DatePickerShort() {
$(":input[datepicker]").each(function () {
ShowPicker($(this));
$(this).bind('focus', function () {
ShowPicker($(this));
});
});
function ShowPicker(obj) {
if ($(obj).is('[readonly]')) {
$(obj).datepicker('destroy');
}
else {
$(obj).datepicker('destroy');
var fecha = new Date();
$(obj).datepicker({
changeMonth: true,
changeYear: true,
minDate: new Date(2000, 08, 01),
firstDay: 1,
dayNamesMin: ['Do', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sa'],
dateFormat: 'dd/mm/yy',
monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],
});
}
}
Run Code Online (Sandbox Code Playgroud)
}
使用 IAM 角色被认为是获取 EC2 实例凭证的首选方式,以便它可以与 AWS API 进行通信。我知道密钥是临时的并且会轮换,这比使用存储在磁盘上的凭据有明显的优势。然而,它引入了另一个严重的安全问题,通过在磁盘上使用加密凭据可以避免这个问题。
如果我的凭据位于文件系统上,我可以使用文件系统的内置权限机制来阻止除需要密钥的进程之外的任何进程读取它们。在这种情况下,如果有人利用以不同于需要访问 AWS API 的用户身份运行的软件中的某些漏洞来破坏实例,他将无法读取包含凭证的文件(由操作系统强制执行)。(我没有考虑他可以提升到 root 访问权限的情况,在这种情况下,所有的赌注都会被取消)。
但是,当使用 IAM 角色时,可以通过网络调用获取凭证:
http://169.254.169.254/latest/meta-data/iam/security-credentials/*.
Run Code Online (Sandbox Code Playgroud)
任何进程,甚至那些几乎具有零权限的进程都可以对此 URL 执行 wget(或curl 等),并拥有可供使用的凭据。事实上,它们的轮换并没有让这种情况变得更加安全。
我可以轻易想到的唯一补救措施是本地防火墙来限制哪些进程可以访问 IP 地址 169.254.169.254。这看起来笨重且不优雅。
使用 IAM 角色时是否有推荐的方法来解决此安全问题?
我收到错误"Relay access denied",但我可以将我的帐户与某些电子邮件程序连接起来.
我的代码:
SmtpClient smtpClient = new SmtpClient();
NetworkCredential basicCredential =
new NetworkCredential("xx@xx.com", "xxx");
MailMessage message = new MailMessage();
MailAddress fromAddress = new MailAddress("xx@xx.com");
smtpClient.Host = "mail.xx.com";
smtpClient.Port = 587;
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = basicCredential;
message.From = fromAddress;
message.Subject = subject;
message.IsBodyHtml = true;
message.Body = body;
message.To.Add("aa@aa.com");
try
{
smtpClient.Send(message);
}
catch (Exception ex)
{
//Relay access denied...
}
Run Code Online (Sandbox Code Playgroud)
有谁知道这个的原因?
我不确定这是否是提出此类概念信息建议的正确位置,所以如果在Stack Overflow中询问它是不相关的还是偏离主题我会道歉.
我想在WPF中开发一个应用程序,它能够绘制具有常规控件功能的多边形,它们可以通过添加,移除或移动顶点来改变形状,通过运行时更改画笔,从数据绑定或直接更改画笔从C#代码操作(仍然不确定).
我想要实现的是绘制地图的应用程序,其上的形状是地图上具有动态边界的实体(例如说政治边界).多边形也必须是具有碰撞测试的可点击控件(不仅仅是一个边界框,而是完全由地图上实体的形状).我可以期待形状非常详细,因为河流和山脉或其他自然物体发现的边界不仅仅是两个顶点的直线,所以它的性能应该是一个重要的因素,因为一个多边形可能包含数百个顶点) .
我得出的结论是,可以通过WPF实现这样的应用程序.但我的不确定性是实现地图绘制的最有效方式,也许我应该像SharpDX一样实施D3D托管,但我不想要它,它会让事情变得更加复杂和困难.
我更喜欢这张地图中的所有内容都可以作为常规WPF控件使用它的数据绑定和样式化功能.几个月来,我与WPF开发了几个小型测试项目,以学习基础知识及其主要概念.但现在我的主要兴趣是用WPF开发.我需要一些建议,因为绘制复杂和动态的形状对我来说仍然不是很清楚,继续开发它.
我使用mallet创建了一个并行主题模型.
我想为每个文档获得顶级单词.
为此,我试图获得一个单词主题概率矩阵.
我怎么做到这一点?
我正在使用ClosedXML从 C# 生成 Excel 文件,并且我试图查看是否可以设置工作表的缩放级别。我在任何文档或谷歌搜索中都找不到这个?
有人知道怎么做这个吗?
class A
{
public int x { get; set; }
// other properties
}
class S
{
public A GetA(...);
}
Run Code Online (Sandbox Code Playgroud)
我想做出以下限制:
A只能在里面修改S.当其他人A通过时GetA(),他只能获得A属性,而不能修改它们.
我决定创建一个新函数S,返回另一个对象:
class B
{
A a;
public int x { get { return a.x; } }
// replicate other A's properties
}
Run Code Online (Sandbox Code Playgroud)
有更好的解决方案吗?
是否可以从代码指标中排除类库或代码文件?我找不到很好的资源,因为他们似乎都专注于代码覆盖,可以在.runsettings文件中设置.
我希望在测试项目的代码行上没有警告的构建.
c# code-metrics visual-studio visual-studio-2013 runsettings
c# ×8
.net ×1
arrays ×1
asp.net ×1
asp.net-mvc ×1
closedxml ×1
clr ×1
code-metrics ×1
credentials ×1
datepicker ×1
drawing ×1
excel ×1
func ×1
il ×1
java ×1
jquery ×1
mallet ×1
polygon ×1
runsettings ×1
sendmail ×1
shapes ×1
wpf ×1