小编dca*_*tro的帖子

垂直居中的内容:在伪元素之前/:之后

我正在努力实现类似于这张图片的东西:

在此输入图像描述

我有一个包含在div中的图像(作为幻灯片的一部分),并且使用:before和:after伪元素,我显示两个控件移动到幻灯片的下一个(>>)或前一个(<<)图像.

到目前为止,我有这个:

div {
  position: relative;
}

div:before {
  display:block;
  height: 100%;
  content: "stuff";
  position:absolute;
  top: 0; left: 0;
  text-align: center;
}
Run Code Online (Sandbox Code Playgroud)

但是,我不能将伪元素的内容集中在一起,文本看起来像这样:

在此输入图像描述

这有可能实现吗?如果没有,那么最具语义性的解决方法是什么?我不想把元素本身,只是它的内容集中.我希望将元素拉伸到100%高度.

编辑: http ://jsfiddle.net/rdy4u/

编辑2:此外,img是液体/液体,div/img的高度未知,宽度设置为800px和max-width80%.

css css-selectors css3 pseudo-element

50
推荐指数
4
解决办法
6万
查看次数

当两个类型参数相同时,消除两个构造函数之间的歧义

特定

class Either<A, B> {

    public Either(A x) {}
    public Either(B x) {}
}
Run Code Online (Sandbox Code Playgroud)

当两个类型参数相同时,如何消除两个构造函数之间的歧义?

例如,这一行:

var e = new Either<string, string>("");
Run Code Online (Sandbox Code Playgroud)

失败:

以下方法或属性之间的调用不明确:'Program.Either.Either(A)'和'Program.Either.Either(B)'

我知道,如果我给出的参数不同的名称(例如,A aB b,而不是仅仅x),我可以使用命名参数来消除歧义(例如new Either<string, string>(a: "")).但我很想知道如何在不改变定义的情况下解决这个问题Either.

编辑:

可以编写几个智能构造函数,但我很想知道是否Either可以直接调用构造函数而不会产生歧义.(或者除了这个之外还有其他"技巧").

static Either<A, B> Left<A, B>(A x) {
    return new Either<A, B>(x);
}

static Either<A, B> Right<A, B>(B x) {
    return new Either<A, B>(x);
}

var e1 = Left<string, string>("");
var e2 = Right<string, string>("");
Run Code Online (Sandbox Code Playgroud)

c#

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

结合:CSS中的last-child与:not(.class)选择器

是否可以选择没有班级attr的最后一个孩子?像这样:

<tr> ... </tr>
<tr> ... </tr>
<tr> ... </tr>
<tr class="table_vert_controls"> ... </tr>
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我想选择第三行.

我尝试了以下,但没有用:

tr:not(.table_vert_controls):last-child
Run Code Online (Sandbox Code Playgroud)

提前致谢.

css css-selectors css3

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

Img的最大高度不尊重父母的尺寸

img在液体中有一个元素div.img的max-height设定为100%.因此,如果图像高于div,则应该渲染为div高.

.png文件的原始大小为200x200.在我的浏览器中,div显示为284x123.因此,img应该在123x123处渲染,以保持其纵横比.

然而,img打破了div的界限,仍然显示为200x200.我似乎无法弄清楚为什么会这样.

这种情况发生在Chrome上,但不适用于Firefox(我上次尝试过).

您可以在此处查看当前状态(http://paginas.fe.up.pt/~ei07171/test/).如果你将鼠标悬停在图片的左侧,你会看到一个灰色的箭头,我正在谈论的.png.右侧的箭头是SVG文件,可以正常工作.

编辑:我已经创建了一个单独的jsfiddle(http://jsfiddle.net/dcastro/3Ygwp/1/),其中img的max-height似乎正常工作..我找不到我的项目是什么导致它不去工作.

html css css3

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

如何在返回集合的lambda中使用async

我有一个异步"上游"的方法.我正在尝试遵循最佳实践并在堆栈中一直进行qith异步.

在MVC中的Controller操作中,我可以预见到遇到死锁问题.如果我依赖.Result().

将Controller操作更改为异步似乎是要走的路,但问题是在lambda中多次调用async方法.

我如何等待返回多个结果的lamda ?

public async Task<JsonResult>  GetLotsOfStuff()
{
    IEnumerable<ThingDetail> things=  previouslyInitialisedCollection
                                      .Select(async q => await GetDetailAboutTheThing(q.Id)));
    return Json(result, JsonRequestBehavior.AllowGet);

}
Run Code Online (Sandbox Code Playgroud)

您可以看到我尝试使lambda异步,但这只是一个编译器异常:

无法转换源类型

System.Collections.Generic.IEnumerable<System.Threading.Tasks.Task<ThingDetail> 目标类型 System.Collections.Generic.IEnumerable<ThingDetail>

我在哪里错了?

c# linq asp.net-mvc lambda asynchronous

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

在哪里放置栅栏/内存屏障以保证新的读取/提交写入?

像许多其他人一样,我一直对易失性读/写和围栏感到困惑.所以现在我想完全理解这些是做什么的.

因此,易失性读取应该(1)表现出获取语义,(2)保证读取的值是新鲜的,即它不是缓存值.让我们关注(2).

现在,我已经读过,如果你想执行一个易失性读取,你应该在读取后引入一个获取栅栏(或一个完整的栅栏),如下所示:

int local = shared;
Thread.MemoryBarrier();
Run Code Online (Sandbox Code Playgroud)

这究竟是如何阻止读取操作使用以前缓存的值?根据栅栏的定义(不允许读取/存储在栅栏上方/下方移动),我会在读取之前插入栅栏,防止读取穿过栅栏并及时向后移动(也就是说,是缓存).

如何防止读取被及时向前移动(或后续指令被及时向后移动)保证了易失性(新鲜)读取?它有什么用?


类似地,我认为易失性写入应该在写入操作之后引入栅栏,从而阻止处理器及时向前移动写入(也就是说,延迟写入).我相信这会使处理器刷新对主存储器的写入.

但令我惊讶的是,C#实现在写入之前引入了栅栏!

[MethodImplAttribute(MethodImplOptions.NoInlining)] // disable optimizations
public static void VolatileWrite(ref int address, int value)
{
    MemoryBarrier(); // Call MemoryBarrier to ensure the proper semantic in a portable way.
    address = value;
}
Run Code Online (Sandbox Code Playgroud)

更新

根据这个例子,显然是从"坚果壳中的C#4"中取出的,写入之后放置的栅栏2 应该强制写入立即刷新到主存储器,并且读取之前放置的栅栏3 应该保证一个新的阅读:

class Foo{
  int _answer;
  bool complete;
  void A(){
    _answer = 123;
    Thread.MemoryBarrier(); …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading volatile memory-fences

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

检查两个列表是否具有相同的项目

我有两个列表如下,我怎么能说他们有相同的元素.订单并不重要.

var list1 = new List<int> {1,2,3};
var list2 = new List<int> {2,1,3};
Run Code Online (Sandbox Code Playgroud)

我怎么能说这些是平等的?我应该编写自己的方法还是有内置的方法?

c# linq list

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

以编程方式绑定ItemsSource

c#代码中的等价物是什么?

<ListView
    x:Name="taskItemListView"
    DataContext="{Binding SelectedItem, ElementName=itemListView}"
    ItemsSource="{Binding taskItems}">
...
</ListView>
Run Code Online (Sandbox Code Playgroud)

我尝试了以下代码,但它似乎不起作用......

Binding b = new Binding();
b.Path = new PropertyPath("taskItems");

DependencyProperty dp = DependencyProperty.Register("itemsSource", typeof(object), typeof(object), null);
BindingOperations.SetBinding(taskItemListView, dp, b);
Run Code Online (Sandbox Code Playgroud)

编辑:

基于@ sa_ddam213的答案,这有效:

Binding dataContextBinding = new Binding();
dataContextBinding.Path = new PropertyPath("SelectedItem");
dataContextBinding.Source = itemListView;
BindingOperations.SetBinding(taskItemListView, ListView.DataContextProperty, dataContextBinding );

Binding sourceBinding = new Binding();
sourceBinding.Path = new PropertyPath("taskItems");
BindingOperations.SetBinding(taskItemListView, ListView.ItemsSourceProperty, sourceBinding );
Run Code Online (Sandbox Code Playgroud)

c# xaml binding windows-runtime

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

扩展现有界面

我遇到了一个问题.我在我的程序中使用外部库提供了一个接口,IStreamable(我没有这个接口的源代码).

然后我在我创建的DLL中实现接口,DFKCamera类.

在我当前的程序中(遗憾的是我无法完全修改因为我只是为它编写插件)然后我只能访问在IStreamable接口中定义的DFKCamera方法.但是,我需要访问我在DFKCamera中编写的另一种方法,以便我的插件工作(程序的其余部分不使用的方法,因此在IStreamable中没有定义).

是否可以在C#中扩展接口的定义?如果我可以扩展IStreamable接口,那么我就可以访问新方法了.

就是这样的情况:

//In ProgramUtils.DLL, the IStreamable interface is defined
//I have only the .DLL file available
namespace ProgramUtils {
    public interface IStreamable {
       //some methods
    }
}

//In my DFKCamera.DLL
using ProgramUtils;

class DFKCamera: IStreamable {
    //the IStreamable implementation code
    ....
    //the new method I wish to add
    public void newMethod() {}


//In the the program that uses DFKCamera.DLL plugin
//The program stores plugin Camera objects as IStreamable DLLObject;
IStreamable DLLObject = new DFKCamera();
//This means that …
Run Code Online (Sandbox Code Playgroud)

c# dll interface

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

为什么`Random.nextInt`被认为不是'可组合的,模块化的,易于并行化'

从"Scala中的函数式编程"一书中,有一节介绍如何以函数方式编写随机数生成器.

它给出了一个例子scala.util.Random:

即使我们对scala.util.Random中发生的事情一无所知,我们也可以假设对象rng有一些在每次调用后都会更新的内部状态,因为每次调用nextInt时我们都会得到相同的值.或者nextDouble.由于状态更新是作为副作用执行的,因此这些方法不是引用透明的.而且正如我们所知,这意味着它们不是可测试的,可组合的,模块化的,并且可以很容易地并行化.

最后一句,它说不是:

  1. 可测试
  2. 可组合
  3. 模块化
  4. 容易并行化

在后面的内容中,它解释了testable部分,但如何理解其他3个方面?

random functional-programming scala

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