Skip to content

Tutorial: Write a custom string interpolation handler – couple of small mistakes #27209

@deep-outcome

Description

@deep-outcome

# 1

[InterpolatedStringHandler]
public ref struct LogInterpolatedStringHandler
{// Add the receiver argument:

I guess // Add the receiver argument: is forgotten since Improved Interpolated Strings discusses declaratively receiver term.

# 2

public LogInterpolatedStringHandler(int literalLength, int formattedCount, LogLevel level, Logger logger, out bool isEnabled)
{
    enabled = logger.EnabledLevel >= level;
    Console.WriteLine($"\tliteral length: {literalLength}, formattedCount: {formattedCount}");
    if (enabled)
    {
        builder = new StringBuilder(literalLength);
    }
    isEnabled = enabled;
}

In fact there are 2 failures:

  • logger and level parameters are switched so declaration [InterpolatedStringHandlerArgument("", "level")] LogInterpolatedStringHandler builder does not work with it.
  • LogInterpolatedStringHandler is declared as struct so builder must be definitely assigned when .ctor returns. So either it must be changed to class or used something like builder = enabled ? new () : null;.

Document Details

Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions